python中的文件处理

一. 文件的基本操作

1.我们可以操作的文件类型:.txt,和没有后缀名的文件。

2.我们现在不能操作的文件类型:word,Excel,ppt等类型文件

numpy,pandas 等模块可以操作。

1.如何操作文件

1:打开文件(open)使用open()函数打开文件,并指定文件名和打开模式(读、写、追加等)

2:读或写  使用write()函数或writelines()函数来写入文件内容。

3:关闭文件  使用close()函数关闭文件,释放文件资源。

open("要操作的文件路径",‘读写模式’,字符编码)

文件的路径又分为:相对路径和绝对路径

注:当路径中出现了字母和\斜杠的组合的时候,会产生一些特殊的含义,所以当我们在编写路径时,应该给它去掉。

f= open(r'D:\Python27\day10\a.txt', 'r', encoding='utf-8')  # \n \t
# 返回的是文件句柄
print(f) 
# <_io.TextIOWrapper name='D:\\Python27\\day10\\a.txt' mode='r' encoding='utf-8'>
2.读取文件
with open('a.txt','r',encoding='utf8') as f:
    print(f.read()) #12354

二. 文件的读写模式

1.语法格式

open(文件路径,读写模式,字符编码)

文件路径:是必须要写的

书写模式:也是必须要写的

字符编码:可选的

2.读写模式

分为“r”,"w","a"

r:只是读取,不能写

w:只能写,不能读

a:在原来的基础上追加内容

1.只能读 r

 f = open('b.txt', 'r', encoding='utf-8') #  No such file or directory: 'b.txt'
 f = open('a.txt', 'r', encoding='utf-8') #  No such file or directory: 'b.txt'
 print(f.read())
 f.close()

 with open('a.txt', 'r', encoding='utf-8') as f:
     print(f.read())

2.只能写 w

写模式的特征:

1.当文件不存在时,会新建一个文件,不会报错

2.写模式会把原来文件里的数据给覆盖掉,书写时要注意,不建议使用w写模式

 with open('b.txt', 'w', encoding='utf-8') as f:
    # pass # 为了不全语法结构
     # f.write('hello')
     # f.write('hahahahhah')
     f.write('jerry')

3.追加模式 a

追加模式:没有该文件也会和w写模式一样,会重新新建一个文件,但他是追加写入,并不会覆盖原来的内容。

with open('c.txt', 'a', encoding='utf-8') as f:
    f.write('hello world')
    f.write('hello world1')
    f.write('hello world2')

三.读写操作相关方法

1.读系列
 with open('a.txt', 'r', encoding='utf-8') as f:
        # print(f.read()) # read方法是一次性读取文件中得所有数据
        # print(f.readline()) # helloworld1
        # print(f.readline()) # readline一次只读文件的一行内容
        # print(f.readlines()) # 一次性读取文件的所有内容,然后每一个内容作为列表的一个元素返回,返回的数据类型是:列表
        print(f.readable()) # able ation un multi ...
2.写系列
with open('a.txt', 'w', encoding='utf-8') as f:
        # f.write('jerry say hello ')
        # f.writelines(['hello\n', 'jerry\n', 'kevin\n', 'jason\n'])
        print(f.writable())
        print(f.readable())	

四.读写的操作优化

with open('a.txt', 'r', encoding='utf-8') as f:
    # print(f.read()) # 一次性读取文件的所有数据,并且光标在文件的末尾,如果在去读,就读不到了
    # print(f.read())
    # 文件句柄f是支持for循环的
    for line in f:
        # line: 就是文件的一行内容
        print(line)
    # 了解的方法:
    # f.flush()  # 把数据从内存中立刻刷到磁盘

注:当你读取的数据比较小的时候,其实是在缓冲区的,当数据量够多的时候,它会一定刷到磁盘。一次性读取文件的所有数据有什么问题:
    当数据比较多的时候,会出现内存溢出,这种情况是坚决不能出现的
    如何优化以上操作:
        一点一点的读取数据然后把数据赶紧刷到硬盘里

1. 二进制下的读写操作
with open('a.txt', 'r', encoding='utf-8') as f:
   print(f.read(5))


with open('a.txt', 'rb') as f:
    print(f.read().decode('utf-8')) # b'helloworld'
    print(f.read(7).decode('utf-8')) # b'helloworld'

t模式:

f.read()如果不指定参数,默认情况下是一次性读取所有

f.read(5)如果指定了参数,返回的就是字符个数

b模式:

f.read()如果指定了参数,返回的就是字节数,如果文件中有中文字符,那么要书写的就是3的倍数,如果有中文也有英文的话,就得重新计算。

2.控制文件的指针移动

指针:可以理解为光标的移动

with open('a.txt', 'r', encoding='utf-8') as f:
     print(f.read(5)) # 你helloworld
     f.seek(3, 1)
     print(f.read())
     # print(f.read(5))
     # print(f.read())

with open('a.txt', 'rb') as f:
    print(f.read(2))  # helloworld
    f.seek(-3, 2)
    print(f.read())
    # print(f.read(5))
    # print(f.read())

f.seek()

offset:int:代表的是移动的偏移量,如果是正数就是往右移,如果是负数就是往左移

whence:int=0代表的是模式】

控制模式:

0:默认模式,该模式代表指针移动的字节数是以文件的开头为参考,它能够使用在t和b模式。

1.该模式代表指针移动的字节数是以当前所在的位置为参考的,只支持b模式(二进制),t模式不可以

2.该模式是代表指针移动的字节是以文件的末尾为参考。

五.文件的修改:

with open('a.txt',mode='r+t',encoding='utf-8') as f:
    f.seek(5)
    f.write('哈哈')
##hello哈哈好

mode = +r   mode=w+t   mode=a+t 都是可读可写

注:硬盘当中的数据是不允许直接修改的,内存中得到的数据是可以修改的

读取文件中所有的数据:

#读取文件中所有的信息
with open('a.txt',mode='r', encoding='utf-8') as f:
    date = f.read()
    print(date)

#读取完之后,做字符替换
with open('a.txt',mode='wt',encoding='utf-8') as f:
    f.write(date.replace('哈哈', '不好'))

你可能感兴趣的:(python,开发语言)