Python(28)-文件,os模块

文件

  • 1. 文件
  • 2. 文件的基本操作
  • 3. 读取文件open()
    • 3.1 文件指针: 标记从哪一个位置开始读取数据.
    • 3.2 文件的打开方式mode
    • 3.3 文件按行读取
      • 3.3.1 readline()
      • 3.3.2 readlines()
  • 4.文件输出f.write(),print()
  • 5.文件复制
    • 5.1 小文件复制(搬家)
    • 5.2 大文件复制(搬家)
    • 5.3 shutil.copy()
    • 5.4 shutil.rmtree()
  • 6.os 模块
    • 6.1 改变工作目录os.chdir()
    • 6.2 文件重命名os.rename()
    • 6.3 删除文件os.remove()
    • 6.4 删除空路径os.removedirs()
    • 6.5 目录列表os.listdir()
    • 6.6 创建目录os.mkdir()
    • 6.7 删除目录os.rmdir()
    • 6.8 判断某个目录是否存在,如果不在,创建这个目录
    • 6.9 os.path.split("xxx/xx/xxxx")
    • 6.10 os.path.isdir()
  • 7.CSV文件
  • 8.JSON文件
  • 9.文本文件的编码方式
  • 10.在Python2.x中使用中文
  • 11.eval()

本系列博文来自学习《Python基础视频教程》笔记整理,视屏教程连接地址:http://yun.itheima.com/course/273.html

open 不仅能打开txt文件,还能打开.csv,.JSON 文件。🐂🍺呀。

1. 文件

计算机的文件就是保存在 长期存储设备 上的一段数据,长期存储设备包括:硬盘 U盘 移动硬盘 光盘.
文件的作用:将数据长期保存下来,在需要的时候使用.
cpu 要使用 存在硬盘中文件,需要先将文件加载到内存.

常见两种类型的文件 : 文本文件二进制文件
文本文件 : 可以只用文本编辑软件查看的 ,如Python源程序 , 本质上还是二进制文件
二进制文件 : 保存的内容不是给人直接看的,而是提供给其他软件使用的.例如: 图片文件 音频文件 视屏文件,等不能直接用文本编辑器查看,要有相应的应用软件.

2. 文件的基本操作

在计算机中操作文件的固定套路:
1.打开文件
2.读写文件:读-将文件内容加载到内存.写-将内存内容写到文件
3.关闭文件

在Python中 常用的操作文件的1个函数,3个方法.

名称类型说明
f.open()函数打开文件,并返回文件操作对象(文件句柄)
f.read()方法将文件内容读到内存
f.write()方法将内存内容写入文件
f.close()方法关闭文件,不关闭会占用系统可打开文件句柄数
open函数打开文件,并返回文件操作对象,后面的三个方法通过 文件对象 来调用.

文件句柄的其他方法

方法说明
f.flush()刷新输出缓存
f.read([count])指定读出count个字节的文件内容
f.readline()读出一行信息
f.readlines()读出所有行信息
f.seek(offset[,where])从where开始移动文件指针offset个单位,where=0文件开始处,1当前位置,2文件结尾
f.tell()获得文件指针的位置
f.writelines(list)把list中的字符串一行一行写入文件,连续写入文件,没有换行

3. 读取文件open()

open函数 的第一个参数是 要打开的文件名(要带扩展名). 如果文件存在,返回文件操作对象,如果文件不存在,会抛出异常.
read方法可以一次性 读入并返回文件的所有内容
如果忘记关闭文件,会造成资源浪费,和后续操作困难所以打开之后,应该写关闭语句,然后再去写读写操作语句

# 1.打开文件
file=open("test.txt")# 2.读取文件内容
text=file.read()
print(text)# 3.关闭文件,如果忘记关闭文件,会造成资源浪费,和后续操作困难所以打开之后,应该写关闭语句,然后再去写读写操作语句
file.close()

3.1 文件指针: 标记从哪一个位置开始读取数据.

第一次打开文件时,文件直至会指向 文件的开始位置.
执行read方法后,文件指针会指向 读取内容的末尾

注意:如果执行了一次read方法,读取了所有内容,再次调用 read方法时,不能够读取文件内容了. 因为第一次读取后,文件指针移动到了文件末尾.

# 1.打开文件
file=open("test.txt")# 2.读取文件内容
text=file.read()
print(text)
print(len(text))print("-"*50)
text=file.read()
print(text)
print(len(text))# 3.关闭文件,如果忘记关闭文件,会造成资源浪费,和后续操作困难所以打开之后,应该写关闭语句,然后再去写读写操作语句
file.close()

输出:

hello python
hallo19
--------------------------------------------------0

实际上并没有说如何解决这个问题,或者进一步操作

3.2 文件的打开方式mode

file=open(“文件名.扩展名”,“打开方式”)

打开文件的方式:open 函数需要传递的第二个参数.如果不指定打开方式,默认以只读方式 打开,并返回文件对象

打开方式说明
r只读方式打开,文件指针在文件头
w只写方式打开,如果文件存在会覆盖, 如果文件不存在创建新的文件
a(append)追加方式打开,文件指针在文件尾. 如果文件不存在创建新的文件
r+读写方式打开,文件指针在文件头
w+读写方式打开,如果文件存在会覆盖, 如果文件不存在创建新的文件
a+读写方式打开,文件指针在文件尾. 如果文件不存在创建新的文件
读写方式打开,频繁操作文件指针,会影响文件读写效率.开发时,更多会以只读 或者只写 的方式来操作文件.

3.3 文件按行读取

3.3.1 readline()

read 方法会把文件的所有内容都读入到内存,如果文件太大,会使得内存占用率非常高.可以改用逐行读取的方法.readline()方法可以一次读取一行内容,方法执行后会把文件指针移动到下一行.
代码示例:

file=open("test.txt")
while True:text=file.readline()print(text)# 判断是否读到内容if  not text:breakfile.close()

3.3.2 readlines()

data = []
data1 = []
fr = open("readline_test.txt")
for line in fr.readlines():      # 也是全部读取,吃内存line = line.strip()          # 去掉字符串开头或者结尾的空白符,包括换行符data_line = line.split(",")  # 使用","分割数据并返回一个列表data_line1 = list(map(int, line.split(",")))data.append(data_line)data1.append(data_line1)print(data)
print(data1)
fr.close()

read(size)当size不指定时,会将文件全部内容读取

readline()一次只读取一行即遇到‘\n’返回

readlines()读取整个文件,并返回列表,一行为一个元素

4.文件输出f.write(),print()

f = open("outpu.txt", "w")  # 没有文件的话会新建一个
data = [['1', '2'], ['3', '4']]
line1 = ','.join(data[0])
f.write(line1 + '\n')
line2 = ','.join(data[1])
f.write(line2 + '\n')# print 把原本输出到shell 的内容改输到文件中
data = [[1, 2], [3, 4]]
for line in data:print(str(line[0]) + ',' + str(line[1]), file=f)

output.txt文件的内容

1,2
3,4
1,2
3,4

5.文件复制

5.1 小文件复制(搬家)

打开两个文件-读取原文件内容-写入目标文件-关闭两个文件。

打开文件:原文件默认以只读的方式打开,目标文件以只写"w"的方式打开,如果没有目标文件,会新建一个目标文件。

代码实例:

# 1.打开文件
file_read=open("readme.txt")
file_write=open("readme_copy.txt","w")
# 2.读取操作
text=file_read.read()
file_write.write(text)
# 3.关闭
file_read.close()
file_write.close()

5.2 大文件复制(搬家)

一次性读取会给内存造成巨大的压力,可以使用按行读取与写入来实现这个功能。

# 1.打开文件
file_read=open("readme.txt")
file_write=open("readme_copy.txt","a")# 2.读取操作,按行操作
while True:text=file_read.readline()if not text:breakfile_write.write(text)  # 从头开始写是文件指针的问题,设定在本页的结尾打开,如一追加的方式加原文件的内容到新文件。# 3.关闭
file_read.close()
file_write.close()

5.3 shutil.copy()

import shutil
shutil.copy(文件1,文件2)

对文件1的内容和权限都进行copy。

5.4 shutil.rmtree()

删除一个文件夹(如果文件夹里面有文件也会一起被删掉)比较6.3中的删除。

shutil.rmtree(’./cyy_test/subtest2’)

6.os 模块

文件/目录的常用管理操作
终端或者文件浏览器中可以执行的常规操作。例如:创建,重命名,删除,改变路径,查看目录内容等。通过Python实现上述功能,需要导入os模块。

6.1 改变工作目录os.chdir()

使用脚本运行,默认的工作目录为脚本所在的目录中。可以使用chdir 改变工作目录

import os
print(os.getcwd())
# linux 命令行使用pwd来输出当前路径
os.chdir("/Users/chenyingying")
print(os.getcwd())

输出

/Users/chenyingying/PycharmProjects/DataMining_python
/Users/chenyingying

6.2 文件重命名os.rename()

os.rename(源文件名.扩展名,目标文件名.扩展名)

6.3 删除文件os.remove()

os.remove(文件名.扩展名)

demo:删除文件而保留目录结构

import os
g=os.walk('/home/abc/Desktop/cyy_test')
for path,dir,files in g:  #路径path 文件夹中的文件名files和文件夹名dir(都是list)print(path,dir,files)while files!=[]:for file in files:print(file)os.remove(os.path.join(path,file))files.remove(file)
print('end')

由顶至下的遍历所有文件夹
在这里插入图片描述

6.4 删除空路径os.removedirs()

删除一个空文件夹,如果文件夹里有文件,或者文件夹是删除不成功的。

os.removedirs(’./cyy_test/subtest123’)

删除一个非空路径(如果文件夹里面有文件也会一起被删掉)

shutil.rmtree(’./cyy_test/subtest2’)

6.5 目录列表os.listdir()

os.listdir(目录名)
os.listdir(“.”) # 查看当前目录的目录列表

6.6 创建目录os.mkdir()

os.mkdir(“目录名”)

6.7 删除目录os.rmdir()

os.rmdir(”目录名“)

6.8 判断某个目录是否存在,如果不在,创建这个目录

import os
log_path = os.getcwd() + '/Logs/' #当前文件夹下的Logs文件夹if not os.path.exists(log_path) :  #判断文件夹或文件os.makedirs(log_path)  #创建

参考资料:https://blog.csdn.net/xielifu/article/details/81013536

6.9 os.path.split(“xxx/xx/xxxx”)

将路径分割出来,一次分割一个级别,每次分割得到两个元素的tuple.

>>> import os 
>>> a=os.getcwd()
>>> a
'/home/pp/Desktop/testsplit/aaa/bbb'>>> a=os.getcwd()+"/1.txt"
>>> a
'/home/pp/Desktop/testsplit/aaa/bbb/1.txt'>>> b=os.path.split(a)
>>> b
('/home/pp/Desktop/testsplit/aaa/bbb', '1.txt')>>> c=os.path.split(b[0])
>>> c
('/home/pp/Desktop/testsplit/aaa', 'bbb')

6.10 os.path.isdir()

目录名:要查看的目录的名字。确定目录列表中的字符串为一个目录,而不是一个文件。返回的True或者False。

os.path.isdir(“xxx”)

先判断路径是否存在,不存在就创建该路径

if not os.path.isdir(tarDir): os.makedirs(tarDir)

7.CSV文件

excel 格式的数据,将文件存成csv。以逗号作为文件分割符号。

f=open(‘data.csv’)
import pandas
data = pandas.read_csv()

8.JSON文件

保存字典格式的数据,将文件存成JSON 的格式。借助json模块实现序列化和反序列化
序列化:字典格式-》字符串 json.jumps()
反序列化:字符串-》字典格式 json.loads()
不带s的 json.jump()保存json文件,json.load()导入json文件

import json
x = {"height": 176,"weight": 60}
print("原x", x)
y = json.dumps(x)  # 转化为字符串
print("序列化x", y)
x = json.loads(y)
print("反序列化x", x)f = open("json_test.json", 'w')
json.dump(x, f)
f.close()f = open("json_test.json", 'r')
print("从文件读取到的json", json.load(f))

输出

原x {'height': 176, 'weight': 60}
序列化x {"height": 176, "weight": 60}      # 三者的区别并不大
反序列化x {'height': 176, 'weight': 60}
从文件读取到的json {'height': 176, 'weight': 60}

9.文本文件的编码方式

文本文件存储的内容是基于字符编码的文件,常见的编码有ASCIIUNICODE编码。
Python2.x默认使用ASCII 编码
Python3.x 默认使用UTF-8编码

Ascii编码:计算机中只有25个ASCII 字符,一个ASCII在内存中占一个字节(8位,256种组合方式)
UTF-8编码:使用1-6个字节来表示一个字符,涵盖了地球上几乎所有地区的文字。大多数汉字会使用三个字节表示。UTF-8 是UNICODE编码的一种编码格式。

10.在Python2.x中使用中文

希望Python2.x 解释器以UTF-8的方式解析文件,需要在Python2.x的开头使用一下代码,解释器会以UTF-8编码来处理Python文件.
官方推荐:

# *-* coding=utf-8 *-*

也可以写:

# coding:utf8

在Python2.x中,带有中文与英文混合的字符串需要在字符串的开头写一个u,来告诉编译器这是一个utf8编码的字符串.

a=u"hello 世界"

11.eval()

eval 函数会将字符串当成 有效表达式 来 求值 , 并返回计算结果.

简单案例:计算器.要求用户输入一个 加减乘除混合运算,程序返回一个计算结果

input_str=input("请输入算术题")
print(eval(input_str))# 输入:(1+3)*5
# 输出:15 完全不需要解析表达式中的内容,自动转换计算. 

注意事项:
在开发时,千万不要使用eval()直接转换**input()**的结果
在控制台上输入以下命令,会直接执行任何的终端命令

import(“os”).system(“ls”)

import os
print(os.path.exists("cyy_test*"))        # 不能使用通配符
print(os.path.exists("cyy_test1.py"))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOCP的程序

C代码 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-图像分割-RCNN-FCN-Boxsup

图像分割算法对比小结1.{基本概念}2.{R-CNN}2.1R-CNN 网络结构选择性搜索算法为什么选择SVM作分类器边框回归2.2{R-CNN 训练}2.3{R-CNN实验结果}2.4{R-CNN语义分割}2.5{补充材料}2.5.1{R-CNN建议区域放缩}2.5.2{IOU阈值设置不一样的原因}2.5.3{Bounding-box回归修正}2.6{R-CNN存…

Python模块(3)--PIL 简易使用教程

PIL模块-用与记1.图片导入Image.open()2.图像显示.show()4.查看图片属性.format,.size,.mode3.图像格式转换.convert()4.图像模式“L”&#xff0c;“RGB”,"CYMK"5. 图片旋转.rotate()旋转方式1&#xff1a;旋转不扩展旋转方式2&#xff1a;旋转扩展旋转方式3&#…

输入输出系统

I/O设备&#xff1a;输入输出和存储功能的设备 I/O设备的分类 按传输的速度&#xff1a; 低速设备&#xff08;如键盘、鼠标、语音输入输出设备&#xff09; 中速设备&#xff08;如行式打印机、激光打印机等&#xff09; 高速设备&#xff08;如磁带机、磁盘机、光盘机等&…

模拟银行家算法

介绍 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

js知识点汇总

1.本门课的作用&#xff08;JavaScript的作用&#xff09;所有基于Web的程序开发基础 2.一种计算机客户端脚本语言&#xff0c;主要在Web浏览器解释执行。 3.浏览器中Javascript&#xff0c;用于与用户交互&#xff0c;以及实现页面中各种动态特效 4.在HTML文件中&#xff0…

关于Java中String的问题

String 对象的两种创建方式&#xff1a; String str1 "abcd";//先检查字符串常量池中有没有"abcd"&#xff0c;如果字符串常量池中没有&#xff0c;则创建一个&#xff0c;然后 str1 指向字符串常量池中的对象&#xff0c;如果有&#xff0c;则直接将 st…

如何判断对象已经死亡

引用计数 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 这个方法实现简单&#xff0c;效率高&#xff0c;但是目前主流…

算法(2)-二叉树的遍历(递归/迭代)python实现

二叉树的遍历1.深度优先DFS1.1 DFS 递归解法1.1.1先序遍历1.1.2中序遍历1.1.3后序遍历1.2 DFS迭代解法1.2.1先序遍历1.2.2中序遍历1.2.3后序遍历2.广度优先BFS3.二叉树的最大深度3.1递归3.2迭代4.翻转二叉树4.1递归4.1迭代5.合并两棵二叉树5.1递归5.2迭代有两种通用的遍历树的策…

利用posix_fadvise清理系统中的文件缓存

利用posix_fadvise清理系统中的文件缓存leoncom c/c,unix2011-08-03当我们需要对某段读写文件并进行处理的程序进行性能测试时&#xff0c;文件会被系统cache住从而影响I/O的效率&#xff0c;必须清理cache中的对应文件的才能正确的进行性能测试。通常清理内存可以采用下面的这…

空间分配

目前主流的垃圾收集器都会采用分代回收算法&#xff0c;因此需要将堆内存分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 大多数情况下&#xff0c;对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时&#xff0c;虚拟…

创建与打开IPC通道的POSIX和SYSTEM V方法

先说&#xff30;&#xff2f;&#xff33;&#xff29;&#xff38;的吧&#xff1a; mq_open&#xff0c;sem_open&#xff0c;shm_open着三个函数用于创建或者打开一个IPC通道。 由此可见&#xff0c;消息队列的读写权限是任意的&#xff0c;然而信号灯就没有&#xff0c;…

软件测试基础知识

第一章 1.1 软件测试背景知识和发展史 互联网公司职位架构&#xff1a;产品 运营 技术 市场 行政软件测试&#xff1a;使用人工或自动化手段&#xff0c;来运行或测试某个系统的过程&#xff0c;其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别&#…

Jmeter-基础篇

常用压力测试工具对比 1、loadrunner 性能稳定&#xff0c;压测结果及细粒度大&#xff0c;可以自定义脚本进行压测&#xff0c;但是太过于重大&#xff0c;功能比较繁多 2、apache ab(单接口压测最方便) 模拟多线程并发请求,ab命令对发出负载的计算机…

shell一文入门通

简单来说“Shell编程就是对一堆Linux命令的逻辑化处理”。 W3Cschool 上的一篇文章是这样介绍 Shell的 hello world 学习任何一门编程语言第一件事就是输出HelloWord了&#xff01;下面我会从新建文件到shell代码编写来说下Shell 编程如何输出Hello World。 (1)新建一个文件…

RPC编程

图 3 说明在客户机和服务器之间完成 RPC 涉及的步骤。 图 3. 在客户机和服务器之间完成 RPC 涉及的步骤服务器 RPC 应用程序初始化期间它会向 RPC 运行时库注册接口。需要注册接口是因为&#xff0c;客户机在向服务器发出远程过程调用时&#xff0c;要检查它是否与服务器兼容。…

synchronized使用和原理全解

synchronized是Java中的关键字&#xff0c;是一种同步锁。它修饰的对象有以下几种&#xff1a; 修饰一个方法 被修饰的方法称为同步方法&#xff0c;其作用的范围是整个方法&#xff0c;作用的对象是调用这个方法的对象&#xff1b; 修饰一个静态的方法 其作用的范围是整个…

算法(11)-leetcode-explore-learn-数据结构-链表的经典问题

leetcode-explore-learn-数据结构-链表31.反转一个链表2.移除链表元素3.奇偶链表4.回文链表5.小结本系列博文为leetcode-explore-learn子栏目学习笔记&#xff0c;如有不详之处&#xff0c;请参考leetcode官网&#xff1a;https://leetcode-cn.com/explore/learn/card/linked-l…

Linux线程池的设计

我设计这个线程池的初衷是为了与socket对接的。线程池的实现千变万化&#xff0c;我得这个并不一定是最好的&#xff0c;但却是否和我心目中需求模型的。现把部分设计思路和代码贴出&#xff0c;以期抛砖引玉。个人比较喜欢搞开源&#xff0c;所以大家如果觉得有什么需要改善的…

leetcode121买卖股票的最佳时机

给定一个数组&#xff0c;它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易&#xff08;即买入和卖出一支股票&#xff09;&#xff0c;设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,…