Python文件

                                        Python文件操作

在Python中,不需要导入外部库来读取和写入文件。Python为创建、写入和读取文件提供了内置的函数。

1.open() 方法

     Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode=‘r’)
完整的语法格式为:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:

file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:

mode 参数有

参数描述
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(Python 3 不支持)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

2.打开文件

文件路径
文件路径:主要有两种,一种是使用相对路径,想上面的例子就是使用相对路径。另外一种就是绝对路径,像’ C:/Users/shu/Desktop/python/test.txt’
在桌面上有两个文件:
在这里插入图片描述

f = open('test.txt',encoding = 'utf-8')#打开文件
data = f.read() #读文件
print(data)
f.close()  #关闭文件

输出结果:

这是一个文件df

使用with打开文件

with open('test.txt',encoding = 'utf-8')as f: #打开文件 
   data = f.read() #读文件
   print(data)

输出结果:

这是一个文件df

通过对两种读取方式的对比发现,第一种方式比较简洁,不用关心流是否关闭,with会在文件不再使用时自动关闭流,并且输出的格式与文件内容中显示的一致。第二种方式就必须要手动显示的关闭流,且输出格式与文件内容不同,需要进行特殊处理,且发生异常之后,可能会导致流未正常关闭。

3.读文件

read() 方法用于从文件读取指定的字节数,如果未给定或为负则读取所有
fileObject.read()

with open('test.txt','r',encoding = 'utf=8')as f: #打开文件
   print('文件名:',f.name)
   data = f.read(10) #读文件
   print('读取的字符串是',data)
   

输出结果:

文件名: test.txt
读取的字符串是 这是第一行
这是第

readline() 方法用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
fileObject.readline();

with open('test.txt','r',encoding = 'utf=8')as f: #打开文件
   print('文件名:',f.name)
   date1 = f.readline()#
   print('读取第一行:',date1)
   data = f.readline(3) #读文件
   print('读取的字符串是:',data)
   data = f.readline(10) #读文件
   print('读取的字符串是:',data)
   data = f.readline(10) #读文件
   print('读取的字符串是:',data)

输出结果:

文件名: test.txt
读取第一行: 这是第一行

读取的字符串是: 这是第
读取的字符串是: 二行

读取的字符串是: 这是第三行

readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。
如果碰到结束符 EOF 则返回空字符串

fileObject.readlines( )

with open('test.txt','r',encoding = 'utf=8')as f: #打开文件
   print('文件名:',f.name)
   for i in f.readlines(): #依次读取每行
       i = i.strip()     #去掉每行头尾空白
       print('读取的数据为:',i)

输出结果:

文件名: test.txt
读取的数据为: 这是第一行
读取的数据为: 这是第二行
读取的数据为: 这是第三行
读取的数据为: 这是第四行
读取的数据为: 这是第五行
读取的数据为: 这是第六行

4.写文件

write() 方法用于向文件中写入指定字符串。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。
fileObject.write( [ str ])
文件中的内容

这是第一行
这是第二行
这是第三行
这是第四行
这是第五行
这是第六行

with open('test.txt','r+',encoding = 'utf=8')as f: #打开文件
   print('文件名:',f.name)
   str = '这是第七行'
   f.seek(0,2)#在文件末尾写入一行
   line = f.write(str)

   f.seek(0,0)
   for i in range(7):
       line = next(f)
       print('文件号%d--%s'%(i,line))

输出结果:

文件名: test.txt
文件号0--这是第一行

文件号1–这是第二行

文件号2–这是第三行

文件号3–这是第四行

文件号4–这是第五行

文件号5–这是第六行

文件号6–这是第七行

writelines() 方法用于向文件中写入一序列的字符串。
这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
换行需要制定换行符 \n。

fileObject.writelines( [ str ])

with open('test.txt','w',encoding = 'utf=8')as f: #打开文件
   print('文件名:',f.name)
   seq = ['卢阿涛1\n','luatao2']
   line = f.writelines(seq)

输出结果:

卢阿涛1
luatao2

5.随机存取

seek() 方法用于移动文件读取指针到指定位置。
fileObject.seek(offset[, whence])

offset – 开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。

whence:可选,默认值为 0。给 offset 定义一个参数,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起。

如果操作成功,则返回新的文件位置,如果操作失败,则函数返回 -1。

with open('test.txt','rb+')as f: #打开文件
   print('文件名:',f.name)
   f.write(b'0123456789abcdef')
   print(f.seek(3))#移动到第3个字节
   print(f.seek(-2,2))#移动到文件倒数第2个字节

输出结果:

文件名: test.txt
3
17

tell() 方法返回文件的当前位置,即文件指针当前位置。
fileObject.tell()

返回文件的当前位置。

with open('test.txt','rb+')as f: #打开文件
   print('文件名:',f.name)
   f.write(b'0123456789abcdef\n')
   f.seek(3)
   pos = f.tell()
   print(pos)

输出结果:

文件名: test.txt
3

6.其他方法

==truncate() 方法用于从文件的首行首字节开始截断,截断文件为 size 个字节,无 size 表示从当前位置截断;截断之后 V 后面的所有字节被删除,其中 Widnows 系统下的换行代表2个字节大小。 ==
fileObject.truncate( [ size ])

ize – 可选,如果存在则文件截断为 size 字节。

with open('test.txt','r+',encoding = 'utf-8')as f: #打开文件
   print('文件名:',f.name)

   line = f.readline()
   print('读取行:',line)

   f.truncate()
   line = f.readlines()
   print('读取行:',line)

输出结果:

文件名: test.txt
读取行: 1:www.baidu.com

读取行: [‘2:www.baidu.com\n’, ‘3:www.baidu.com\n’, ‘4:www.baidu.com\n’, ‘5:www.baidu.com’]

with open('test.txt','r+',encoding = 'utf-8')as f: #打开文件
   print('文件名:',f.name)


  
   f.truncate(10)
   str = f.read()
   print('读取数据:',str)

输出结果:

文件名: test.txt
读取数据: 1:www.ba

flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
fileObject.flush()
fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
fileObject.fileno();
isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。
fileObject.isatty();

7.迭代文件内容

#每次迭代一个字符
with open('test.txt','r') as f:
    while True:
        char = f.read(1)
        if not char:
          break
        print(char)

#每次迭代一行数据
with open('test.txt','r') as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line)

#读取所有内容  read
with open('test.txt','r') as f:
        data = f.read()
        print(data)

#读取所有内容  readlines
with open('test.txt','r') as f:
        data = f.readlines()
        print(data)       

#使用fileinput实现延迟迭代,读取实际需要文本的部分
import fileinput
for line in fileinput.input('test.txt'):
    print(line)

输出结果:

1


w
w
.
b
a
1锛歸ww.ba
1锛歸ww.ba
[‘1锛歸ww.ba’]
1锛歸ww.ba

8.文件/目录常用的函数使用方法

参数描述
Getcwd()返回当前工作目录
Chdir(path)改变工作目录
Listdir(path = ‘.’)列举指定目录中的文件名(‘.’表示当前目录,‘…’表示上一级目录)
Mkdir(path)创建单层目录,如该目录已存在抛出异常
Makedirs(path)递归创建多层目录,如该目录已存在抛出异常,
Remove(path)删除文件Rmdir(path)删除单层目录,如该目录非空抛出异常
Removedirs(path)递归删除目录,从子目录到父目录琢层尝试删除,遇到目录非空抛出异常
Rename(old,new)将文件名重命名
System(command)运行系统的shell命令

9.OS.path模块中关于路径常用的函数使用方法

参数描述
Basename(path)去掉目录路径,单独返回文件名
Dirname(path)去掉文件名 ,单独返回路径
Join(path1[,path2[,…]])将path1,path2各部分组合成为一个路径名
Split(path)分割文件名与路径,返回(f_path,f_name)元组,如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在
Splitext(path)分离文件名与扩展名,返回(f_nme,f_extension)元组
Getsize(file返回指定文件的尺寸,单位是字节)
Getatime(file)返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或Localtime()函数换算)
Getctime(file)返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或
Localtime()函数换算)返回指定文件的最新的修改时间(浮点型秒数,可用time模块gmtime()或Localtime()函数换算)

以下函数返回True或False

参数描述
Exists(path)
Isabs(path)判断指定路径是否为绝对路径
Isdir(path)判断指定路径是否存在且是一个目录
Isfile(path)判断指定路径是否存在且是一个文件
Islink(path)判断指定路径是否存在且是一个符号链接
Ismount(path)判断指定路径是否存在且是一个挂载点
Sameflie(path1,path2)判断path1和path2两个路径是否指向同一个文件

今天下午又两三个小时吧,写这玩意可真费事啊!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值