博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-文件处理
阅读量:5356 次
发布时间:2019-06-15

本文共 1810 字,大约阅读时间需要 6 分钟。

#文件的读写:

## r:只读

f = open('File.txt','r')  # r:只读data = f.read()print(data)f.close()       #及时关闭,释放内存

  open函数默认即为只读模式,故其中的 ' r ' 可不写。文件访问结束后要及时close()。

## w:覆盖文件原始数据后写入新数据

f = open('File.txt','w')           #'w':覆盖原数据来写入。f.write('hahaha\n')f.write('ha\n123\n345\n')f.writelines(['asd\n','123','1'])  #只能是字符串f.close()

  在‘w’条件下,若open函数指定的文件不存在,则会新建一个该文件来写入数据。

## a:不覆盖原始数据,只在原始数据后追加新数据(不可读)

f = open('File.txt','a')

  其它操作方法同 ' w '。

 

# 使用with as 语句可避免使用f.close()

 

with open('new.txt', 'w') as f:    #等效于f = open('new.txt', 'w')    f.write('hahaha\n')with open('new.txt') as f:    print(f.read())

 

 #文件在b模式下的读写:

  b模式即以字节的方式来读写文件,b模式下的open函数无法指定其编码方式。在b模式下,就要常常对字符串和字节进行编码(encode)或解码(decode)转换:

字符串------encode-----> bytes

bytes -------decode-----> 字符串

 ## rb:以字节方式读文件

  新建File.txt文件,其内容为:

    123

    你好啊

 

f = open('File.txt','rb')   #不能指定编码方式,即不能添加encoding:'xxx'print(f.read())print(f.read().decode('gbk'))

 

  上面第一个print是直接输出 f 的内容,故其输出结果为字节方式的文件内容,结果如下:

b'123\r\n\xc4\xe3\xba\xc3\xb0\xa1'   #\r\n即回车,在linux中是\n

  如果想要输出其原本的数据形式,则需要解码(decode)来实现,即第二个print。此处我们用了 ‘gbk’ 编码来解码,其结果如下:

123你好啊

 

## wb:以字节方式写文件

f = open('test.py','wb')

  在以字节方式写入文件内容时,要注意写入的数据必须是字节格式,字符串是不能写入二进制文件的。所以当写入字符串时:

f.write('123\n')

  程序会立刻报错:

TypeError: a bytes-like object is required, not 'str'

  正确写入文件主要有如下两种方式:

 

f.write(bytes('你好\n', encoding = 'utf-8'))  #bytes()可将字符串按照指定编码(此处为'utf-8')转换成字节形式f.write('1111\n'.encode())         #此处使用的是encode来将字符串编码成pytes

 

 

#其它文件操作方法:

f.flush()     #刷新,以在写了一堆数据后保存文件,类似于系统快捷键Ctrl+Sf.seek(3)    #将文件里的光标位置从开头移动3个字节f.seek(-3,2)  #此处2代表从文件末尾移动光标,-3说明向前移动三个字节。(注意:在2模式下,第一个参数一定要加上-号)#循环文件的推荐方式:f = open('a.txt','r')for i in f:       print(i)'''这种方式循环时,是从文件中每次拿一行数据,若使用:for i in f.readlines():    print(i)则程序会先生成一个包含了文件全部数据的列表,然后在列表中每次拿一行。因此在有些情况下会占用较大内存,产生浪费。'''

 

转载于:https://www.cnblogs.com/yu-long/p/9986690.html

你可能感兴趣的文章
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
HAL层三类函数及其作用
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>