Python基础学习之文件操作 1. open() 函数 想要对文件进行操作,必须先建立文件对象,然后再对文件对象进行操作;想要建立文件对象,需要使用open() 函数;open()函数使用方法如下: f
Python基础学习之文件操作
1. open() 函数
想要对文件进行操作,必须先建立文件对象,然后再对文件对象进行操作; 想要建立文件对象,需要使用open() 函数;open()函数使用方法如下:
file_object = open(file_name [, access_mode][, buffering])函数中各个参数的解释如下:
- file_name:文件名称,如果文件在py程序所在文件夹,则可以直接读取。如果在其他文件夹,则可以传入对应路径;
- access_mode:access_mode是打开文件的模式:只读,写入,追加等,默认文件访问模式为只读 (r)。其余方式见表一:文件模式表;
- buffering: 如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
表一:文件模式表
模式 解释 t 文本模式 (默认)。 x 写模式,新建一个文件,如果该文件已存在则会报错。 b 二进制模式。 + 打开一个文件进行更新(可读可写)。 U 通用换行模式(不推荐)。 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 r+ 打开一个文件用于读写。文件指针将会放在文件的开头。 rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。表二:模式总结
模式 r r+ w w+ a a+ 读 + + + + 写 + + + + + 创建 + + + + 覆盖 + + 指针在开始 + + + + 指针在结尾 + +2. 文件对象的属性
2.1 closed;mode;name;softspace;
- file_object.closed : 返回true如果文件已被关闭,否则返回false。
- file_object.mode : 返回被打开文件的访问模式。
- file_object.name : 返回文件的名称。
- file_object.softspace :如果用print输出后,必须跟一个空格符,则返回false。否则返回true。
2.2 文件属性举例:
# 打开一个文件 f = open("text.txt", "w") print("文件名: ", f.name) # 输出:text.txt print("是否已关闭 : ", f.closed) # 输出:False print("访问模式 : ", f.mode) # 输出:w print("末尾是否强制加空格 : ", f.softspace) # 输出:03. 文件对象的方法
3.1 read()
read()函数可以读取一个文件对象中的字符,使用方法如下:
file_object.read(count)- count:此参数为读取的字节数;若传入,则从头开始读取 count 数量的字符;若不传入,默认为尽可能多的读取,所以文件一般会被完全读取;
- 部分读取:
- 全部读取
3.2 write()
write() 函数可以将字符串写入一个文件对象,用法如下:
file_object.write(string) f= open("test.txt",'a+') # 打开文件 f.write('\nhello,man!') # 写入字符 f.close() # 关闭文件此时文件内容:
hello world! hello everyone! hello,man!3.3 close()
文件对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。在读写完毕后,不能忘记 close() 文件对象;用法如下:
file_object.close() # 文件对象被释放,即文件被关闭;4. 游标位置
4.1 tell()方法
tell() 方法可以返回游标的当前位置,用法如下:
file_object.tell()举例:
f = open("test.txt",'r+') str1=f.read(10) p=f.tell() print('当前字符的位置:',p) # 当前字符的位置: 10 f.close()4.2 seek()方法
seek() 方法可以设置游标的当前位置,用法如下:
file_object.seek(offset [,from])- Offset:表示要移动的字节数。
- From:指定开始移动字节的参考位置。该值的设置值如下:
- 0:文件的开头作为移动字节的参考位置;
- 1:当前的位置作为参考位置;
- 2:文件的末尾将作为参考位置。
举例:
f = open("test.txt",'r+') str1=f.read(10) p=f.tell() print('当前字符的位置:',p) # 当前字符的位置: 10 f.seek(0,0) # 修改游标的位置 p=f.tell() print('当前字符的位置:',p) # 当前字符的位置: 0 f.close()5. Shutil 模块(文件的复制,重命名,移动,删除)
5.1 复制文件
复制文件时,可以使用 shutil.copy(source,destination) 函数;复制的同时,如果目标路径中包含文件名,可以修改文件的名称;用法如下:
d = shutil.copy(source,destination) # 复制一个文件source(文件),到destination的位置;返回值为新文件路径;- source:文件或者文件夹的原路径;
- destination:目标路径;
举例:
import shutil,os os.chdir(r'D:\') shutil.copy(r'D:\123.txt',r'D:\document') #复制文件到指定文件夹 shutil.copy(r'D:\123.txt',r'D:\document\456.txt') #复制文件到指定文件夹并重命名为456.txt5.2 复制文件夹
复制文件夹时,可以使用 shutil.copytree(source,destination) 函数;用法如下:
import shutil,os os.chdir(r'D:\') shutil.copytree(r'D:\',r'D:\document\') #复制文件夹到指定文件夹5.3 移动文件 & 文件夹
与复制的使用方法完全一致,只要复制完成后,删除源文件即可;
5.4 删除文件 & 文件夹 (删除后,不会出现在垃圾箱,不建议使用)
- 删除文件,使用 os.unlink(path) ,只能删除文件;
- 删除文件夹,使用 os.rmdir(path),只能删除空文件夹;
- 删除文件 & 文件夹,使用 shutil.rmtree(path),可以删除文件夹 & 文件夹中的文件;
举例:删除指定文件夹内的所有的 .xml 文件;(备注:此处只便利了一层,如果需要深层次的删除,需要使用walk()函数)
# 删除指定文件夹内的所有的 .xml 文件 import os os.chdir(r'D:\Learning Material\Python\Sample') for filename in os.listdir(): # 只能列出文件夹的文件或文件夹,无法包含子文件夹的内容; if filename.endswith('.XML'): os.unlink(filename)举例:删除指定文件夹内的所有的 .xml 文件;(深度删除)
import os oldDocDir = r'D:\Learning Material\Python\Sample' for foldername, subfolders, filenames in os.walk(oldDocDir): for filename in filenames: if filename.endswith('.XML'): os.unlink(filename)5.5 删除文件 & 文件夹 (会出现在垃圾箱,建议使用)
使用第三方模块 send2trach,比python常规的删除安全的多;会将删除的东西发送到垃圾桶;path为需要删除的路径;
import send2trash send2trash.send2trash(path)