Python基础之文件处理

一、常用操作

1.打开文件 open()  

f=open('a.txt')
print(f) #----------------------> <_io.TextIOWrapper name='a.txt' mode='r' encoding='cp936'>

 其中a.txt 是相对路径,如果想用绝对路径打开文件,要在文件名前加一个‘r’,否则就要把‘’改成‘\’

打开文件时有个问题,就是字符编码的问题。如果不指定打开编码,默认使用操作系统的编码,Windows是GBK

可以在这里查看文件编码方式,使用什么编码保存的文件,就要用什么编码打开文件,可以在open()文件时指定打开的编码方式

写成这样:f=open('a.txt',encoding='utf-8')

还有一个问题就是,这种打开文件的方式会把整个文件读到内存中,如果文件很大的话,内存可能就会被占满了,可以用for line in f的方式

打开文件后,就可以操作文件了,如读文件f.read(),注意最后一定要关闭文件f.close()

2.文件的打开模式

f=open(文件路径,模式)

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b         #以字节的方式操作不会有乱码,也不用转码

3.print(f.readline())   打印文件第一行

4.print(f.readlines())   将文件以列表的形式打印

5.按读的方式打开文件并不能操作文件,只有以写的方式打开文件才能进行写操作

  f.open('a.txt','w',encoding='utf-8')    

 如果文件存在,先把原文件内容删除,再写

 如果文件不存在,则新建一个文件,在写

   在进行写操作是注意,文件中都是字符串类型,要带着引号,也可以以列表的形式写,当然列表的每个元素也必须是字符串  

f=open('a.txt','w',encoding='utf-8')
f.write('123413 ') # 代表换行
f.write(['123 ','hello '])
f.close()    #注意最后一定要关闭文件

二、其他方法

f=open('a.txt','w',encoding='utf-8')
f.flush() #写完后立即刷到硬盘上

print(f.close()) #查看文件是否为关闭状态

print(f.encoding) #查看编码方式

print(f.name) #查看文件名

print(f.readable()) #查看是否可读

print(f.wirteable()) #查看是否可写

print(f.read()) #括号里可以指定数字,只有read()里的数字是以字符为单位,
# 其余的文件内光标移动如seek,tell,truncate都是以字节为单位

print(f.seek(2)) #seek是以字节为移动单位,但是汉字在utf-8中是以三个字节为单位的,所以如果是seek(2) 就会报错

print(f.tell()) #告诉当前光标位置

f.truncate(3) #截断,从0到3后面的删除,注意一定要是写操作才行

三、二进制的方式复制文件

 以一张图片a.jpg为例,复制一份

read_file=open('a.jpg','rb')
write_file=open('a.copy.jpg','wb')
write_file.write(read_file.read())

四、文件修改

#修改文件a.txt中'hello'为'hi'
import os #导入os模块
with open('a.txt','r',encoding='utf-8') as read_f,    #用with语句可以很方便的进行上下文处理,可以自动关闭操作的文件
open('.a.txt.swp','w',encoding='utf-8') as write_f: #新建一个临时文件
for line in read_f:
if 'hello' in line:
line=line.replace('hello','hi')
write_f.write(line)
os.remove('a.txt')
os.rename('.a.txt.swp','a.txt')
原文地址:https://www.cnblogs.com/zhang-can/p/7004451.html