python文件操作知多少

简介: 对于文件大家应该都不陌生,但是在接触计算机之前,通常将文件定义为内容的载体.如公文书信或者有关政策理论方面的文章.计算机文件也一样,而且在计算机中文件的类型更加丰富多样,用途广泛.有的是用来支撑程序运行的,有的只是单纯用于数据存储,文件使用文件扩展名区分文件类型,比如我们常用图片格式,有.jpg/.png/.gif,记事本保存的文字.txt,办公文档类型.docx/.pptx/.xlsx等.它是存储在计算机存储区的信息集合.文件是计算机中具有特定标识的存储区,他由操作系统管理,用于计算机操作系统的使用过程中的各项操作的支持,在计算机的系统使用中,文件的操作是贯穿始终的,小到文本存储,大到各

前言


对于文件大家应该都不陌生,但是在接触计算机之前,通常将文件定义为内容的载体.如公文书信或者有关政策理论方面的文章.计算机文件也一样,而且在计算机中文件的类型更加丰富多样,用途广泛.有的是用来支撑程序运行的,有的只是单纯用于数据存储,文件使用文件扩展名区分文件类型,比如我们常用图片格式,有.jpg/.png/.gif,记事本保存的文字.txt,办公文档类型.docx/.pptx/.xlsx等.它是存储在计算机存储区的信息集合.


文件是计算机中具有特定标识的存储区,他由操作系统管理,用于计算机操作系统的使用过程中的各项操作的支持,在计算机的系统使用中,文件的操作是贯穿始终的,小到文本存储,大到各种系统软件.而且在软件的开发中对文件的操作几乎是必不可少的,不管是web程序还是桌面程序,就比如对数据的操作,其实也是通过特定的算法和特定的数据格式把数据存入持久化文件中.还有在Python的最热门的自动化办公和数据分析中,对文件的读写操作也是常用操作,还有我们网站中最常用图片上传操作同样涉及到文件操作.


我们开发中对文件的操作非常频繁.而且很多我们待处理的信息都存储于文件中,当处理这些信息时需要通过Python程序来处理,我们该如何操作呢?下面带你领略Python处理文件的风采.


在学习之前,我们先来看看文件处理的基本步骤:

网络异常,图片无法展示
|


文件的读取


Python程序想要使用计算机存储区的文件时,需要遵守Python文件操作的规定,依顺序读取,如果可以随便处理会让文件变得很不安全.

想要读取文件,先使用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)


参数说明:

  1. file: 必需,文件路径(相对或者绝对路径)
  2. mode: 可选,文件打开模式(常用值:t,x,b,+,r,rb,rb+,w,w+,wb....)默认为文本模式,如果要以二进制模式打开,加上b
  3. buffering: 设置缓冲
  4. encoding: 一般使用utf8
  5. errors: 报错级别
  6. newline: 区分换行符
  7. closefd: 传入的file参数类型
  8. opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符


既然有fo.open()那当然有fo.close(),close() 方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。

当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。要养成使用 close() 方法关闭文件是的好习惯


下面通过简单的例子示范文件的操作:


首先先创建一个txt文本文件.随便输入点内容.


网络异常,图片无法展示
|

# encoding='utf-8'防止读取中文出现错误,指定字符集为utf8file=open(r'test.txt',encoding='utf-8')  #'r'是防止字符转义的 这里可以使用相对路径或者绝对路径whileTrue:  #Python一般在冒号后面需要注意缩进line=file.readline() #按行读取iflen(line) ==0: #读完跳出循环停止读取breakprint(line,end="")
file.close()

执行结果:

网络异常,图片无法展示
|


在上面的第5行代码中,我们使用到lreadline() 函数,是按行读取文本,文件读取还有一个与之类似的按字符读取read(N),N为一次从文件读取的字符个数,默认读取一个字符到字符串

上面我们使用了while的死循环,通过判断读取的进度结束读取并跳出循环(注:在程序中一定要避免死循环) ,我们还可以使用for循环同样能达到一样的效果:for line in open("文件路径"),按行读取,其实就是通过循环移动文件读取的指针.


再举个例子:计算文件中某个字符的出现次数统计,在平常开发中好像也常用

这里会使用到collections库


collections是Python内建的一个集合模块,提供了许多有用的集合类,实现一些特定的数据类型,可以替代Python中常用的内置数据类型如dict,list,set和tuple。比如不可变类型tuple,我们可以轻松地用它来表示一个二元向量,但这不是本文的重点,感兴趣的童鞋可以自行搜索学习.


素材:我复制的是这篇文章到test.txt


网络异常,图片无法展示
|


importcollectionsfile=open('test2.txt',encoding='utf-8')
str=file.read().split(' ')
n=collections.Counter(str)
print(n['home'])
s=zip(n.values(), n.keys())
output=open('result.txt','w',encoding='utf-8')
foriteminsorted(s, reverse=True):
output.write("{0} {1}\n".format(item[1], item[0]))


result.txt统计的部分截图:

网络异常,图片无法展示
|


直接读入数据然后使用collections.Counter()来统计每个单词的出现次数,返回的是一个字典,然后使用zip把字典压缩成列表变量s


文件的写入

前面说了文件的读操作,自然还有对应的写操作.写文件操作的顺序和读操作的顺序差不多:建立文件链接,写数据,然后关闭文件.


接着我们通过例子来感受一下.


#写数据操作text='''As he stood in front of the group of overachievers he said, 'OK, time for a quiz.' He pulled out a one-gallon,wide-mouth jar and set it on the table in front of him.He also produced about a dozen fist-sized rocks and carefully placed them,one at a time, into the jar.When the jar was filled to the top and no more rocks would fit inside, he asked, 'Is this jar full?'...'''file=open("testWrite.txt", "w")
file.write(text)
file.close()

testWrite.txt截图

网络异常,图片无法展示
|


使用了三引号给text指定了带有换行的字符串

上面的写入操作主要是write()函数,写入函数除了这个还有writelines()函数用于向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表。

我们还可以从web上读取数据并保存所需要的数据到文件


#读取web页面信息fromurllibimportrequestfrombs4importBeautifulSoupurl="http://www.jianshu.com"headers= {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
page=request.Request(url,headers=headers)
page_info=request.urlopen(page).read().decode('utf-8')
soup=BeautifulSoup(page_info, 'html.parser')
titles=soup.find_all('a', 'title')
file=open("webinfo.txt","w",encoding='utf-8')
fortitleintitles:
file.write(title.string+'\n')
file.write("http://www.jianshu.com"+title.get('href') +'\n\n')

结果截图:

网络异常,图片无法展示
|

这个程序requests和BeautifulSoup两个库来获取网络上的信息

如果提示两个不存在,可使用以下命令安装即可:

pip install requests
pip install beautifulsoup4


文件的其他操作函数

file.flush():刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入

file.fileno():返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上

file.next():返回文件下一行,但是Python3不支持

与next()函数类似的还有seek()

file.seek():移动文件读取指针到指定位置

file.tell():返回文件当前位置

file.truncate([size]):从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小


扩展


上面例子只是对少量数据的处理,但是在日常的开发中往往需要大数据文件进行处理.相对来说Python对大数据文件处理效率不高.所以如果我们遇到大数据文件应该怎么处理呢.我们一般处理方式有:


可以使用分治的思想

  1. 将文件切分为多个小段,同时处理多段,处理完后将处理结果合并
  2. 使用Python自带的迭代器分行处理文件

这个问题稍微复杂,这里点到为止,以后有机会再单独细说.

对文件的操作就到这里了.篇幅有限,点到为止.还有更多操作文件的方式等你发现!

目录
相关文章
|
25天前
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
Python文件操作(1)
|
4月前
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
56 2
|
24天前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
5月前
|
开发者 Python
Python基础第七篇(Python的文件操作)
Python基础第七篇(Python的文件操作)
|
2月前
|
存储 Python
Python文件操作
Python文件操作
|
5月前
|
存储 安全 开发者
文件操作?Python让你轻松搞定!
【6月更文挑战第12天】Python编程中的文件操作至关重要,涉及数据存储和系统交互。通过内置的`open()`函数,开发者可轻松处理文件。以只读模式`'r'`为例,使用`with`语句打开并读取文件内容;写入文件则用`'w'`或`'a'`模式。文件对象还支持高级功能,如文件指针移动,允许随机访问。掌握这些技能能提升开发效率。
33 0
|
2月前
|
存储 安全 Python
30天拿下Python之文件操作
30天拿下Python之文件操作
33 1
|
2月前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
45 6
|
1月前
|
Java 程序员 Python
【Python】文件操作
【Python】文件操作
21 0
|
3月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
32 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作