首页 > 编程知识 正文

关于python的文件处理,python文件方法

时间:2023-12-25 12:47:11 阅读:322218 作者:ETUG

本文目录一览:

Python其实很简单 第十五章 文件操作

在各种变量中保存的数据都是临时的,随着程序运行结束都会丢失。要做到数据长期有效,必须建立在磁盘中建立文件,将数据输入到文件中并保存。需要获取数据时需要打开文件读取。

而我们自己建立的程序都是应用程序,从本质上讲,应用程序是无法直接操作计算机的硬件的,譬如读写磁盘中文件,这就需要调用操作系统中的相应命令。接下来我们使用的Python内置函数open()、write()都是通过调用操作系统的相关命令才实现文件读写的,至于其中的细节,我们就不需要考虑了。

15.1创建和打开文件

在Python 中创建或打开文件,实际上是建立一个对象,该对象通过调用内置的open()函数创建或打开一个文件。

语法:

file object = open(filename [, mode][, buffering])

参数说明如下:

filename:file_name变量是一个包含了你要访问的文件名称的字符串值;

mode:mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

Buffering:如果buffering的值被设为0,就不会有寄存;如果buffering的值取1,访问文件时会寄存行;如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。

mode参数的参数值及说明

对于其中最难区别的r、r+、w、w+、a、a+几个参数的区别总结如下,要特别注意指针的位置:

下面举例说明open( )函数的使用方法。

例1:

file=open('1.py')

如果文件“1.py”存在,则可以打开此文件;如果文件“1.py”不存在,则会出现如下提示:

Traceback (most recent call last):

File " ", line 1, in

file=open('1.py')

FileNotFoundError: [Errno 2] No such file or directory: '1.py'

例2:

file=open('4.py',’a+’)

虽然文件“4.py”不存在,但运行并未出现错误,参见上表,“a+”的含义是以读写模式打开文件,如果该文件已经存在,新内容将以追加方式写入;如果该文件不存在,则新建文件用于写入。查看文件夹,发现已经生成了一个新的文件4.py。

例3:

file=open('python.png','rb')

print(file)

运行结果:

这就是说,虽然Python可以打开一个图片格式的文件,但print()并不能将其输出,还需要第三方库中模块的相应方法去处理,如PIL中的open()f方法。

例4:

file = open("f.txt", "w",encoding='utf-8')

# 以只写模式打开文件f.txt,编码方式为utf-8

print( "文件名: ", file.name) # 输出文件名

print( "是否已关闭 : ", file.closed) # 文件是否打开

print( "访问模式 : ", file.mode) # 文件访问模式

运行结果:

文件名: f.txt

是否已关闭 : False

访问模式 : w

例5:

15.2关闭文件

打开文件使用后要及时关闭,以免造成不必要的破坏,同时也可以释放内存。在Python中使用close()方法可以关闭文件。

语法格式:

file.close()

其中,file为文件对象。

15.3 with语句

with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。

with语句的语法格式如下:

with expression as target:

with-body

其中,expression用于指定一个表达式,譬如打开文件的open()函数。target用于指定一个变量,并且将expression的结果保存到该变量中,譬如文件对象file。with-body用于指定with语句体,譬如一些文件操作的相关语句,如果没有要执行的语句体,则直接用pass语句代替。

假设python当前目录下存在一个test.txt文件,其内容如下:

Python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

Python是交互式语言: 这意味着,您可以在一个 Python 提示符 后直接执行代码。

Python是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

Python是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发。

举例如下:

with open('test.txt','r',encoding='utf-8') as file:

line=file.readline() # readline()方法可以读取文件一行数据,接下来就会讲到。

print(line)

运行结果如下:

Python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

而此时,我们给该段代码with语句之外再增加一个读取文件的语句,代码如下:

with open('test.txt','r',encoding='utf-8') as file:

line=file.readline()

print(line)

line2=file.readline()

print(line2)

发现出现了如下错误提示:

Traceback (most recent call last):

File "C:/Users/zym/AppData/Local/Programs/Python/Python39/3.py", line 5, in

line2=file.readline()

ValueError: I/O operation on closed file.

意思是要读取的文件已经被关闭了。

由此可知,当with语句运行结束后,被打开的test.txt文件就自动关闭了。

15.4读取文件

在Python 中读取文件的方法有:

1、读取指定个数的字符

格式如下:

File.read([size])

其中,file为打开的文件对象。size为可选参数,可以指定要读取的字符个数,省缺表示读取所有内容。

在调用read()方法读取文件内容时,文件必须是以r(只读)或者r+(读写)方式打开。

如:

with open('test.txt','r',encoding='utf-8') as file:

txt=file.read() (或txt=file.read(10))

print(txt)

将读取、输出test.txt文件的全部内容(或前10个字符)。

2、移动文件的指针

对于刚打开的文件,文件指针总是指向文件头的。也可以通过seek()方法将文件的指针移动到新的位置。

格式如下:

file.seek(offset[,whence])

其中,file表示已经打开的文件对象;offset用于指定移动的字符个数;whence表示从哪个位置起始计算个数,其值为0表示从文件头开始计算,其值为1表示从当前位置开始计算,其值为2表示从文件尾开始计算,默认值为0。

例如:

with open('test.txt','r',encoding='utf-8') as file:

string=file.read(9)

print('取9个字符: '+string)

file.seek(2) #指针从文件头开始移动2个字符

string=file.read(9) #从当前位置读取10个字符

输出结果:

取9个字符:

Python是一种

取9个字符:

thon是一种解释

而下面的代码会抛出错误:

with open('test.txt','r',encoding='utf-8') as file:

file.seek(2,1) #指针从当前位置开始移动2个字符

string=file.read(10) #从当前位置读取10个字符

print('取10个字符: '+string)

错误提示为:

Traceback (most recent call last):

File "C:UserszymAppDataLocalProgramsPythonPython393.py", line 7, in

file.seek(2,1) #指针从当前位置开始移动2个字符

io.UnsupportedOperation: can't do nonzero cur-relative seeks

原因在于,必须使用b模式(即rb)打开文件,才能使用whence参数。但是,b模式(二进制)不适合文本文件。对于test.txt这样的文本文件,为了解决通过改变指针读取任意位置字符,可以采用加一个位置变量的方法来存储指针的值。

例如:

with open('test.txt','r',encoding='utf-8') as file:

#utf-8汉字与英文字符都占一个字符

string='' #设置一个空字符串

pointer=0 #当前指针为0

str1=file.read(6) #读取6个字符

pointer+=6 #指针变量后移6个字符

string+=str1 #string用来存放已读取的字符

print('取6个字符: ',str1)

file.seek(pointer) #指针从文件头开始移动2个字符

str1=file.read(8) #从当前位置读取10个字符

pointer+=8 #指针跳过已读取的字符

string+=str1

print('再取8个字符: ',str1)

print('所有读取的字符: ',string)

print('当前指针所处的位置: ',pointer)

str1=file.read(1)

print('当前指针所处的字符: ',str1)

运行结果如下:

取6个字符:

Python

再取8个字符:

是一种解释型语言

所有读取的字符:

Python是一种解释型语言

当前指针所处的位置:

14

当前指针所处的字符:

3、读取一行数据readline()方法

语法格式:

file.readline()

例:

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

string=f.read(1) # 读取文件的第一个字符

if string != '': # 防止文件为空文件

lineno=0

while True:

line=f.readline()

if line != '':

lineno+=1

print('第'+str(lineno)+'行:'+line,end='')

# 因为每行都有自带的分行符,print()语句不允许换行

else:

break # 出现空行时停止读取

else:

print('要读取的文件为空文件!')

运行结果:

第1行:ython是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

第2行:Python是交互式语言: 这意味着,您可以在一个 Python 提示符 后直接执行代码。

第3行:Python是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

第4行:Python是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发。

4、读取全部行命令readlines()方法

语法格式:

File.readlines()

该方法与read()方法一样,在调用read()方法读取文件内容时,文件必须是以r(只读)或者r+(读写)方式打开。

例:

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

txt=f.readlines()

print(txt)

运行结果:

['Python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。 ', 'Python是交互式语言: 这意味着,您可以在一个 Python 提示符 后直接执行代码。 ', 'Python是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。 ', 'Python是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发。 ']

从上面的运行结果可以看出,readlines()方法的返回值为一个字符串列表。所以,也可以以读取列表元素的方法输出。如下所示:

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

txt=f.readlines()

for line in txt:

print(line,end='')

运行结果:

Python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

Python是交互式语言: 这意味着,您可以在一个 Python 提示符 后直接执行代码。

Python是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

Python是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发。

15.5 写入文件内容

语法格式如下:

file.write(string)

其中,file为打开的文件对象,string为要写入的字符串。

写入文件内容时,文件必须以w(可写)或a(追加)模式打开。否则,会抛出如下异常提示:

Traceback (most recent call last):

File "C:UsersAdministratorAppDataLocalProgramsPythonPython383.py", line 2, in

f.write('人生苦短,我用Python!')

io.UnsupportedOperation: not writable

关于write()方法的用法举例如下:

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

f.write('人生苦短,我用Python!')

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

txt=f.read()

print(txt)

运行结果:

Python是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

Python是交互式语言: 这意味着,您可以在一个 Python 提示符 后直接执行代码。

Python是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

Python是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发。

人生苦短,我用Python!

可以看出,由于文件的打开方式为a模式(追加模式),写入的内容被写入到文件的末尾。

在Python中,文件操作方法里没有类似于字符串内的计算长度、查找、替换、截取、分隔等方法,为什么没有?原因可能是文件的类型太复杂,譬如说二进制文件,上述操作的意义不大。如果仅仅要对文本文件进行上述操作,完全可以先把文件的内容读取到字符串中,再用相应的字符串函数或方法去操作就可以了。譬如,要将test.txt文件中的字符串‘Python’替换为’PHP’,则可以用如下代码完成:

txt1=''

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

txt1=f.read() #先将文件内容存入字符串txt1中

txt2=txt1.replace('Python','PHP') #将txt1中的'Python'替换为'PHP',并存入txt2

with open('test.txt','w',encoding='utf-8') as f:

f.write(txt2) #将字符串txt2的内容写回到文件中

这里之所以分两步打开文件(第一次为r模式,第二次为w模式),而没有采用一次读写(r+、w+方式),因为那样比较容易出错。实践证明,将文件的读操作和写操作分开其实是非常正确的选择。

python对文件的独操作有哪几种?请详细说明每种方法

1.打开文件:

f=open(r'E:PythonProjectstest7a.txt',mode='rt',encoding='utf-8')

以上三个单引号内分别表示:要打开的文件的路径,mode为文件打开方式具体介绍在下文,encoding为文件的字符编码,一般默认为utf-8

2.读写文件:

data=f.read() # 读文件

f.write() # 写文件

3.关闭文件:

f.close()

4.为了简便,一般采用上下文的方法进行文件操作,可不用关闭文件

with open('a.txt',mode='rt',encoding='utf-8') as f:

data=f.read()

print(data)

with open('a.txt',mode='wt',encoding='utf-8') as f:

f.write('hello world')

5.控制文件读写的操作:

r:(默认模式):只读:以该模式打开文件时,若文件不存在则报错,若文件存在,则文件指针在文件开头,即从文件开头开始读文件

w:只写:以该模式打开文件时,若文件不存在则创建一个文件,如文件存在,则清空文件内容,文件指针移到开头

a:追加写:以该模式打开文件时,若文件不存在则创建一个文件,如文件存在,则将文件指针移到文件末尾,在文件末尾写入新的内容

6.控制文件读写内容的模式:(t 和 b都不能单独使用,必须与r,w,a结合使用)

t:(默认):无论读写都是以字符为单位,只能识别文本文件,必须要制定encoding

b:无论读写都是以字节为单位,可以识别所有文件,一定不能指定encoding

7.文件的拷贝

with open ('a.txt',mode='rb') as af,

open('b.txt',mode='wb') as bf:

data=af.read

f.write(data)

执行程序后,打开文件,即可发现文件已成功拷贝,这里使用 b 而不是用 t 模式,是因为文件有多种格式

8.文件的修改:

文件的修改是在硬盘上实现文件的覆盖,相当于一个新的文件以旧的文件名来命名的; 文件的修改有俩种方式,分别适用于不同的情景

方式一(适用于容量小的文件):这种方式的原理是:创建一个新的文件,将旧文件的内容拷贝到新的文件中;这样内存里就存在俩个文件,故不适用于容量大的文件,具体代码见下方 View

with open('a.txt',mode='rt',encoding='utf-8') as f:

data=f.read()

data_new=data.replace('yang', 'yv')

with open('b.txt',mode='wt',encoding='utf-8')as p:

p.write(data_new)

方式二(适用于容量大的文件):此方式的原理为:读取旧文件的一行内容,修改后写到临时文件中,循环往复直到写完,然后将源文件删除,将临时文件命名为源文件名.这种方式在内存中只存在2行文件,节省内存,可用于大文件

import os

with open('b.txt',mode='rt',encoding='utf-8') as f,

open('.b.txt.swap',mode='wt',encoding='utf-8') as p:

for line in f:

p.write(line.replace('yv','yang'))

# 调用replace方法,将源文件中的'yv',换成'yang'

os.remove('b.txt')

os.rename('.b.txt.swap','b.txt')

9. 文件的阶段:truncate(n)

将文件中n个字节后内容全删了,当 n 不存在时,即删除文件全部内容

10.文件内指针的移动

f.seek(): 指针的移动是以字节为单位的

seek 有三种模式:

0:(默认模式) 指针在文件开头,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用

1:指针在当前位置

2:指针在文件末尾

以下为具体事例:

# 0

with open('a.txt',mode='rt',encoding='utf-8')as f:

f.seek(3,0)

print(f.tell()) # 指针当前位置

print(f.read()) # 从指针后读出所有内容

# 1 参照指针当前位置

with open('a.txt',mode='rb')as f:

f.read(2)

f.seek(4,1)

print(f.tell())

print(f.read().decode('utf-8'))

# 2 参照文件末尾

with open('a.txt',mode='rb')as f:

f.seek(-5,2)

print(f.tell())

print(f.read().decode('utf-8'))

当 seek处于 2 模式时,可以将文件中新加入的内容打印出来,具体代码如下:

# 另一个文件进行写操作,写的代码如下:

with open('a.txt',mode='at',encoding='utf-8')as f:

f.write('hello worldn')

# 每在文件中写入新的内容,都打印出来,以下代码执行打印操作:

import time

with open('a.txt',mode='rb')as f:

f.seek(0,2)

while True:

line=f.readline() # readline 可以读取没有内容的部分

# print(line.decode('utf-8'))

if len(line)==0:

time.sleep(0.1)

else:

print(line.decode('utf-8'))

开启数据分析的大门-数据收集:Python对文件的操作

简介

我是一名应届经济学毕业生,在学习Python语言的过程中,接触到了数据分析,机器学习和人工智能,并对此特别感兴趣,现在我把整个学习过程记录下来,希望和我有相同兴趣和爱好的朋友们一同成长,期盼着各位专家的指导。

环境介绍

在整个过程当中,将采用Python和Excel,采用Python,是因为Python提供了丰富的开发框架和工具库,使用Excel是因为Excel是使用非常广泛的办公软件,我在Excel里将复杂的算法简单化,使大家快速理解各种难以理解的算法。

在开始之前,我们已经准备好了Anaconda和Excel环境。在这里省略了这个过程。

数据获取将通过tushare开放平台,后面我会介绍和演示如何应用tushare平台。

数据分析流程简介

数据分析是由数据收集开始,收集的数据经过标准化处理和整理后,通过各种算法,进行数据分析,目的是为了总结过去的 历史 数据,在数据趋势上预测未来的走势,同时对现存的环境进行优化。

我们今天先从数据收集开始。

数据收集需要应用到Python对文件的读写操作。

下面这段代码以只读方式采用’UTF-8’编码方式打开当前目录下的text1.txt文件,并输出到屏幕上。操作完毕后,关闭文件。

小贴士:在从tushare平台获取数据时,每个用户会分配到一个key,我们可以把这个key封装到这个文件里。为的是数据安全和便利性。

Python对数据的处理主要是csv文件格式,Excel和数据库。今天我们主要针对csv文件进行操作。为的是尽快开始我们的数据分析之旅。后面在适当的时候,我来完成对Excel和数据库的操作。

Python 读取csv文件有很多种方法,我们这里采用PANDAS库,下面是读取csv文件代码:

下面这段代码先生成数据列表,然后写入csv文件。

好了,到现在为止,Python对数据收集的基础工作就算完成了,Python对文件操作有很多技巧,不是我们这一系列的重点,就不一一介绍了,有兴趣的伙伴可以查阅相关文档。

python大文件处理

1. Chunks——分块处理

2. 分段式反复读取

3. with open()

4. fileinput()

    该模块的input()函数有点类似文件readlines()方法,但它是一个可迭代对象,即每次只生成一行,需要用for循环迭代。在碰到大文件的读取时,无疑效率更高效。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。

Python文件处理注意事项总结

Python文件处理注意事项总结

文件处理在编程中是常见的操作,文件的打开,关闭,重命名,删除,追加,复制,随机读写非常容易理解和使用。需要注意的是文件的安全关闭,采用with语句轻松便捷:

1.CSV 的文件处理

csv 模块可以很好地处理csv文件,而Pandas 模块则可以较好的处理大型的csv文件,还可以处理HTML等,并提供分块处理。

2.XML 的文件处理

对于较小的xml文件,最好使用cElementTree,至少要用ElementTree,对于大型文件,最好用lxml处理。

3.文件内容的序列化和范序列化

用pickle 实现序列化和反序列化非常简单dump()和load()即可,但要注意,pickle不能实现原子化操作,数据源敏感,存在安全隐患。另一种序列化的形式是json。同样是dumps(),load(),扩展性好,可以指定decoder,性能比pickle差一些。

4.日志文件处理

在记录日志文件使用logging 模块是要注意logging是线程安全的,避免多个进程同时写入同一个日志。

5.图像文件处理

对于通常的文件的图像处理,PIL 模块足以应付了。在Linux环境下要注意相关图像库的安装,一般ImageMagick 库是首选。如果涉及图像识别等深层次图像处理,就要寻求OpenCV的帮助了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。