当前位置 : 主页 > 编程语言 > python >

【Python基础学习】第十二节 文件操作

来源:互联网 收集:自由互联 发布时间:2022-10-26
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) # 输出:0

3. 文件对象的方法

3.1 read()

read()函数可以读取一个文件对象中的字符,使用方法如下:

file_object.read(count)
  • count:此参数为读取的字节数;若传入,则从头开始读取 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() # 关闭文件对象

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.txt

5.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),可以删除文件夹 & 文件夹中的文件;
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)

5.5 删除文件 & 文件夹 (会出现在垃圾箱,建议使用)

使用第三方模块 send2trach,比python常规的删除安全的多;会将删除的东西发送到垃圾桶;path为需要删除的路径;

import send2trash send2trash.send2trash(path)
网友评论