Python文件读写

Posted hongyu0518

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件读写相关的知识,希望对你有一定的参考价值。

Python中打开文件命令 open(),open命令返回文件的一个句柄:如:
f = open(e:\123.txt)

# read()对打开的文件进行读的操作
print(f.read())

# 关闭文件,文件打开后一定要记得关闭文件。在写的时候 可以:打开,关闭先写完,再写打开和关闭中间的代码
 f.close()

f = open(e:\123.txt) 
#这段代码,open 没有指定 mode= 参数,默认使用只读的方式打开文件,文件没有写的权限
f = open(e:\123.txt)
f.write(hello python)
f.close()
上面的代码会报错  io.UnsupportedOperation: not writable

另外,如果没有使用为open指定 encoding= 参数,计算机默认使用系统的编码方式打开文件。windows下默认为 gbk, linux下默认为utf-8
文件的打开方式格式: 文件句柄 = open(‘文件路径‘,打开模式, 编码方式)
文件打开方式:
1.r, 只读的方式打开(文件必须存在,如果文件不存在,则会抛出异常) 注:文件以什么方式编码方式写的,就以什么编码方式打开
f = open(e:\123.txt,mode=r,encoding=utf-8)
print(f.read())
f.close()

2.w, 只写模式 (文件不可读,如果文件不存在,则创建一个新的文件,如果文件存在,则会清空里面的内容)
f = open(e:\123.txt,mode=w,encoding=utf-8)
f.write(hello python!) # 在写的时候,要指定编码的方式
f.close()

3.a,只追加写的模式 (文件不可读,不存在则创建新的文件,文件存在的话,可在后面追加内容)
f = open(e:\123.txt,mode=a,encoding=utf-8)
f.write(jack is a student)
f.close()

对于非文本的文件,使用b的模式。‘b‘表示以字节的方式进行操作 如:rb,wb,ab 分别对应以上内容,如果以b的方式打开,读取到的内容是字节类型,写入的时候也需要提供字节类型,不能指定编码

f = open(e:\123.txt,mode=rb) # 指定encoding= 参数 会报错
print(f.read())  # b‘xd6xd0xb9xfa
f.close()
以上代码 输出:b‘xd6xd0xb9xfa‘  如果在写的模式下,写的时候也要以字节的方式进行写

‘+‘模式 ---- r+: 读写模式 w+:写读模式 a+:写读模式
f = open(e:\123.txt,mode=r+,encoding=gbk)
print(f.read())
f.write(helo)
print(f.read()) # 此处在读的时候,就读不到 后面的 hello了,因为,在执行完 write(’hello‘) 这段代码后,光标移动到了文件的末尾
f.close()
在 r+ 模式下,应该先读,后写,如果先写,后读,同样的道理,光标移动到了文件末尾,将读取不到内容

f = open(e:\123.txt,mode=w+,encoding=gbk)
f.write(你好,hellopython)  # 清空文件中的内容,然后重新写数据
f.seek(0)  # 将光标移动到文件开头
print(f.read())
f.close()
f = open(e:\123.txt,mode=a+,encoding=gbk)  # 在 a+ 模式下,将在文件的末尾追加数据,不会覆盖原来的内容
f.write(
jack is a student)
f.seek(0)  # 将光标移动到文件开头
print(f.read())
f.close()

文件读取的其他操作
很多时候,在读写文件的时候,只是打开文件,open 而忘记关闭文件,close,可以使用简单的方式来操作,使用with open。如:
l1 = [静夜思,李白,床前明月光,疑是地上霜,举头望明月,低头思故乡]
with open(e:\静夜思.txt,mode=w+,encoding=utf-8) as f:
     for l1_data in l1:
         f.write(l1_data + 
)    # f.writelines(l1) 可以将列表l1中的内容全部写进去,但是不换行

     f.seek(0)  # 将光标放到文件首
     print(f.readlines()) # 逐行读取文件,并将文件按行为元素保存到一个列表中
     f.seek(3)
     index = f.tell() # 获取当前光标的位置
     print(index)  # 打印 3
关于seek 和 tell 这两个函数
with open(e:\123.txt,mode=w+,encoding=utf-8) as f:
    f.write(abcdefgh)  # 一共 8 个字符,现在想要读取ef两个字符
    f.seek(4)  # 将光标移动到4的位置,也就是 d 的后面,从e开始读取
    index = f.tell() #获取光标位置
    print(f.read(2),index) # 读取两个字符,将读到 ef

with open(e:\123.txt,mode=w+,encoding=utf-8) as f:
    f.write(中国一定强)  # 在文件中写入: 中国一定强  按照 utf-8的编码方式写入
    f.seek(6)   # 将光标移动到位置 6
    index = f.tell()  # 读取光标的位置
    print(f.read(2),index)  # 读取两个字符

以上代码 输出 :一定 6
这里需要注意的是:移动光标 seek 以及 读取光标位置 tell 这两个函数,如果是英文字母。则一个字符为一个位置,如果是其他,按照编码方式来指定或者获取位置
中文 utf-8 的编码方式,一个汉字占用 3 个字节,所以 ‘中国‘占用6个位置 在移动光标,或者获取光标位置的时候 要三个三个的移动
read 在读取的时候,按照能用眼睛看到的最小单位来读取




















以上是关于Python文件读写的主要内容,如果未能解决你的问题,请参考以下文章

Python文件读写

python中文件读写

python--文件读写

Python文件读写操作

Python csv模块(读写文件)

Python22 文件读写StringIOBytesIO