想要对文件进行操做,必须先创建文件对象,而后再对文件对象进行操做;
想要创建文件对象,须要使用open() 函数;open()函数使用方法以下:python
file_object = open(file_name [, access_mode][, buffering])
函数中各个参数的解释以下:web
模式 | 解释 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,若是该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。通常用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。通常用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。若是该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。若是该文件不存在,建立新文件。 |
wb | 以二进制格式打开一个文件只用于写入。若是该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。若是该文件不存在,建立新文件。通常用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。若是该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。若是该文件不存在,建立新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。若是该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。若是该文件不存在,建立新文件。通常用于非文本文件如图片等。 |
a | 打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容以后。若是该文件不存在,建立新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容以后。若是该文件不存在,建立新文件进行写入。 |
a+ | 打开一个文件用于读写。若是该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。若是该文件不存在,建立新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。若是该文件已存在,文件指针将会放在文件的结尾。若是该文件不存在,建立新文件用于读写。 |
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
建立 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
# 打开一个文件 f = open("text.txt", "w") print("文件名: ", f.name) # 输出:text.txt print("是否已关闭 : ", f.closed) # 输出:False print("访问模式 : ", f.mode) # 输出:w print("末尾是否强制加空格 : ", f.softspace) # 输出:0
read()函数能够读取一个文件对象中的字符,使用方法以下:安全
file_object.read(count)
# test.txt 文件内容:
hello world!
hello everyone!
f = open("test.txt",'r+') # 建立文件对象f str1=f.read(10) # 读取前10个字符 print(str1) # 打印读取值,输出:hello worl str2=f.read() print(str2) # 打印全部值,输出:d hello everyone! # 因为游标在读取10个字符后,已经移动到第十个字符,因此str2是从d开始读取的; f.close() # 关闭文件对象
f = open("test.txt",'r+') # 建立文件对象f str2=f.read() # 读取全部字符 print(str2) # 打印全部字符 f.close() # 关闭文件对象
write() 函数能够将字符串写入一个文件对象,用法以下:svg
file_object.write(string)
f= open("test.txt",'a+') # 打开文件 f.write('\nhello,man!') # 写入字符 f.close() # 关闭文件
此时文件内容:函数
hello world!
hello everyone!
hello,man!
文件对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这以后便不能再进行写入。在读写完毕后,不能忘记 close() 文件对象;用法以下:学习
file_object.close() # 文件对象被释放,即文件被关闭;
tell() 方法能够返回游标的当前位置,用法以下:ui
file_object.tell()
举例:spa
f = open("test.txt",'r+') str1=f.read(10) p=f.tell() print('当前字符的位置:',p) # 当前字符的位置: 10 f.close()
seek() 方法能够设置游标的当前位置,用法以下:指针
file_object.seek(offset [,from])
举例:code
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()
复制文件时,可使用 shutil.copy(source,destination) 函数;复制的同时,若是目标路径中包含文件名,能够修改文件的名称;用法以下:
d = shutil.copy(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.txt
复制文件夹时,可使用 shutil.copytree(source,destination) 函数;用法以下:
import shutil,os os.chdir(r'D:\') shutil.copytree(r'D:\',r'D:\document\') #复制文件夹到指定文件夹
与复制的使用方法彻底一致,只要复制完成后,删除源文件便可;
os.unlink(path) # 将 path 处的文件删除; os.rmdir(path) # 将 path 处的文件夹删除;文件夹必须为空; shutil.rmtree(path) # 将 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)
使用第三方模块 send2trach,比python常规的删除安全的多;会将删除的东西发送到垃圾桶;path为须要删除的路径;
import send2trash send2trash.send2trash(path)