Python学习-读写文件

作者: 残阳夕露 | 来源:发表于2018-07-09 17:56 被阅读127次
查看所有Python相关学习笔记

本篇内容用于记录学习过程中接触到的读写文件相关操作

File(文件) 方法

阅读参考2:操作文件和目录(os)

交互学习:Python学习-文件系统

输入和输出

每次打开文件要记得关闭

  • 原始方法
>>>f = open('/path/to/file', 'r')
>>>print(f.read())
>>>f.close()
  • try...finally方法
>>>try:
>>>    f = open('/path/to/file', 'r')
>>>    print(f.read())
>>>finally:
>>>    if f:
>>>        f.close()
  • with方法(自动调用close方法,支持打开多个文件,不用单独考虑close的问题)
>>>with open('/path/to/file', 'r') as f:
>>>    print(f.read())

>>>with open('abc.txt') as a, open('bcd.txt','w') as b:
>>>    f1 = a.read()
>>>    f2 = b.write('hhh')

打开读文件

f=open('C:/Users/Administrator/Desktop/tmp/foo.txt','r')
f=open('C:/Users/Administrator/Desktop/tmp/foo.txt')
  • 直接获取 打开文件后可以直接通过for循环读取内容,每循环一次读一行
with open(r'E:\tmp\hello.txt') as f:
    for one in f:
        print(one)
# 执行结果
1111

2222

333
  • read() 从读取所有内容(读取后,指针位置移动到最后)
with open(r'E:\Python\tmp\own\hello.txt','r+') as f:
    print(f'指针位置:{f.tell()}')
    print(f.read()) #读取内容
    print(f'指针位置:{f.tell()}')
# 执行结果:
指针位置:0
111
222
333
指针位置:13
  • readline() 一行一行读取(每次读取后,指针位置移动到下一行)
with open(r'E:\Python\tmp\own\hello.txt','r+') as f:
    print(f'指针位置:{f.tell()}')
    print(f.readline()) #一行一行读取
    print(f'指针位置:{f.tell()}')
    print(f.readline())  # 一行一行读取
    print(f'指针位置:{f.tell()}')
    print(f.readline())  # 一行一行读取
    print(f'指针位置:{f.tell()}')
# 执行结果
指针位置:0
111

指针位置:5
222

指针位置:10
333
指针位置:13
  • readlines() 读取所有行并存入一个列表中(每次读取后,指针位置移动到最后)
with open(r'E:\Python\tmp\own\hello.txt','r+') as f:
    print(f'指针位置:{f.tell()}')
    print(f.readlines()) #读取所有行并存入一个列表中
    print(f'指针位置:{f.tell()}')
# 执行结果:
指针位置:0
['111\n', '222\n', '333']
指针位置:13

打开写文件

覆盖原来的内容或新建文档

f=open('C:/Users/Administrator/Desktop/tmp/foo.txt','w')

打开写文件

接着原来的内容写或新建文档

f=open('C:/Users/Administrator/Desktop/tmp/foo.txt','a')
写示例
#打开文件,注意转译符,可在路径前加r
f=open(r'C:/Users/Administrator/Desktop/tmp/foo.txt','r+')
#写入内容
f.write('''hasen1.............
hasen2..............
hasen3...............   
hasen4***********
''')
str = f.read()
print(str)
#关闭文件
f.close()

打开二进制文件

要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可

>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

写入二进制文件(用'wb')

未调用close()时由于缓存机制,写的内容不会立即写入到文件,此时可以使用flush()方法,将内容强制写入文件。
f = open('abc.txt','w') #打开文件
f.write('abcdefg') #写入内容
f.flush() #强制写入文件

示例

# 将一个文件中的内容复制到另一个文件
f=open('C:/Users/Administrator/Desktop/tmp/foo.txt')
copy = f.read()
f.close()
print()
print(copy)
f2 = open('C:/Users/Administrator/Desktop/tmp/copy.txt','a')
f2.write('\n'+copy)
f2.close()
f3 = open('C:/Users/Administrator/Desktop/tmp/copy.txt')
copy2 = f3.read()
f3.close()
print('..................')
print(copy2)
tell 当前指针位置
>>>fh = open('abc.txt')
>>>fh.tell()
0
seek 移动指针

seek() 方法用于移动文件读取指针到指定位置。

  • 语法fileObject.seek(offset[, whence])
    • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数
    • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
>>>fh = open('abc.txt')
>>>fh.tell()
0
>>>fh.seek(0) # 从0开始移动0位-->相当于返回到开始位置
>>>fh.tell()
0
>>>fh.seek(2) #从开始位置向后移动两个位置
>>>fh.tell()
2
>>>fh.seek(2,0) #0-从开始位置向后移动两个位置
>>>fh.tell()
2
>>>fh.seek(2,1) #1-从当前位置向后移动两个位置
>>>fh.tell()
4
>>>fh.seek(-2,2) #2-从结束位置向前移动两位
>>>fh.tell()

永久存储:

  • pickle模块
    • 存放:pickling
    • 读取:unpickling

以往存入文件中的都是str格式,读出来后也是str格式
pickle以二进制格式存入,读取出来后还是原文件的格式(字典/列表等)

  • pickle.dump(a,b)将a存入b
  • pickle.load(b)从b中读取
import pickle
my_list = [1,2,3,4]
pickle_file = open('my_list.pkl','wb') # 以二进制写的方式打开文件
pickle.dump(my_list,pickle_file) # 将列表存入文件
pickle_file.close() # 关闭文件

pickle_file = open('my_list.pkl','rb')  # 以二进制读的方式打开文件
my_list2 = pickle.load(pickle_file) # 以列表形式读取文件
pickle_file.close()
print(my_list2)

# 执行结果
[1, 2, 3, 4]

文件的打开模式和文件对象方法

文件打开模式

打开模式 执行操作
'r' 以只读方式打开文件(默认)
'w' 以写入的方式打开文件,会覆盖已存在的文件
'x' 如果文件已经存在,使用此模式打开将引发异常
'a' 以写入模式打开,如果文件存在,则在末尾追加写入
'b' 以二进制模式打开文件
't' 以文本模式打开(默认)
'+' 可读写模式(可添加到其他模式中使用)
'U' 通用换行符支持

文件对象方法

打开模式 执行操作
文件对象方法 执行操作
f.close() 关闭文件
f.read([size=-1]) 从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
f.readline([size=-1]) 从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符
f.readlines() 读取所有行,将所有行以列表形式存储
f.write(str) 将字符串str写入文件
f.writelines(seq) 向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
f.seek(offset, from) 在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
f.tell() 返回当前在文件中的位置
f.truncate([size=file.tell()]) 截取文件到size个字节,默认是截取到文件指针当前位置

相关文章

  • Day01自学 - Python 文件I/O

    学习参考博客地址:Python 文件I/O) | Python学习(九)IO 编程 —— 文件读写) | 廖雪峰P...

  • Python学习-文件系统

    查看所有Python相关学习笔记 文件系统相关知识点 本文学习参考地址 交互学习:Python学习-读写文件 文章...

  • Python学习总结【连载】(十)

    Python学习总结【连载】(十) 2018.06.25 Juttachen 概述 + 32 文本文件的读写 文件...

  • python语法案例必知必会#01

    文件的读写 python中简单的文件读写案例 也可以通过 来写入新的文件 python pow函数 在python...

  • 33.Python编程:StringIO和BytesIO

    前言 前面学习了Python中的文件读写,但很多时候,数据读写不一定是文件,也可以在内存中读写。今天就来学习一下如...

  • 014.Python文件读写

    Python文件读写 1. 概述 读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。...

  • python with关键字——I/O好伴侣

    学习python的朋友都知道文件读写的基本操作,通常我们读写文本的姿势是这个样子的: 每次定义一个文件读写对象,在...

  • Python学习-读写文件

    查看所有Python相关学习笔记 本篇内容用于记录学习过程中接触到的读写文件相关操作 File(文件) 方法 阅读...

  • Python学习记录之:IO编程

    IO编程 文件读写 Python中文件读写语法和C兼容 读文件使用Python内置的open()函数,传入文件名和...

  • python IO编程之文件读写

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 文件读写 读写文件是最常见的IO操作。Pytho...

网友评论

    本文标题:Python学习-读写文件

    本文链接:https://www.haomeiwen.com/subject/ksvtpftx.html