Python文件读写

Python文件读写,第1张

常见的读写 *** 作:

Python内置了读写文件的函数,用法和C是兼容的。本节介绍内容大致有:文件的打开/关闭、文件对象、文件的读写等。仅示例介绍 TXT 类型文档的读写,也就是最基础的文件读写,也需要注意编码问题;

open()   close()     with open(...) as ...

看以下示例就能了解 Python 的 open() 及 close() 函数。这边调用 read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示,具体使用参见下文。

在 E 盘 python_file 文件夹下新建一 a.txt,输入随意,如下:

Python *** 作 打开及关闭方式 如下:

注意 open() 之后 一定要 close()。但由于文件读写时都可能产生IOError,为了保证无论是否出错都能正确地关闭文件,我们用 try ... finally 来实现:

python 简化了改写法,即用 with open(...) as ...  ; 建议之后文件读写都用该写法:

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

相关参数:

File 对象

file 为一对象,它有一些内置属性,如下

file对象的属性:

read()    read(size)   readline()   readlines()

之前的例子已经接触到了 read() 函数,该函数会会一次性读取文件的全部内容,如果能确保文件的大小,自然可以。但若文件过大,内存就爆了,所以,可以反复调用read(size)方法,每次最多读取size个字节的内容;也可调用 readline() 每次读取一行内容;而调用readlines()可以一次读取所有内容并按行返回list。总之,根据需求来。仅以 txt 文件为例,其他的文件读取需要特殊处理;另外,文件的格式编码方式也需要注意;这边仅介绍读取方法,其他的会出专题来学习。

在D:\python_file 下新建 poet.txt;示例如下,由于一个中文会占多个字节,故read(size) 部分会乱码,如:

write()

写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件;'a' 对应的表示追加等。

如下示例,由于 write.txt 文件不存在,创建该文件并写入:

在上例基础上,继续,该文件被重写:

继续,这次使用追加,会在文件结尾追加:

https://blog.csdn.net/msspark/article/details/86745391

https://www.cnblogs.com/tianyiliang/p/8192703.html

https://www.cnblogs.com/camilla/p/7234657.html

https://blog.csdn.net/songlh1234/article/details/83316468

https://www.php.cn/python-tutorials-412484.html

https://blog.csdn.net/weay/article/details/80946152

https://blog.csdn.net/xc_zhou/article/details/81044836

#encoding:utf-8

import os

 

#设置文件夹所在路径,我这里设置哦当前路径

path = './'

#列出路径下所有的一级目录+文件

files = os.listdir(path)

print files

#利用递归,列出目录下包括子目录所有的文件及文件夹(但是没有分级,如果需要分级,自己写吧)

files1 = []

def listfiles(path):

for i in os.listdir(path):

if os.path.isdir(path+i):

files1.append(i)

listfiles(path+i)

else:

files1.append(i)

listfiles(path)

print files1

1.1 读取整个文件

要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下)

PI_DESC.txt

3.1415926535

8979323846

2643383279

5028841971

file_reader.py

with open("PI_DESC.txt") as file_object:

contents = file_object.read()

print(contents)

我们可以看出,读取文件时,并没有使用colse()方法,那么未妥善的关闭文件,会不会导致文件收到损坏呢?在这里是不会的,因为我们在open()方法前边引入了关键字with,该关键字的作用是:在不需要访问文件后将其关闭

1.2文件路径

程序在读取文本文件的时候,如果不给定路径,那么它会先在当前目录下进行检索,有时候我们需要读取其他文件夹中的路径,例如:

现在文件PI_DESC.txt存储在python目录的子文件夹txt中

那么我们读取文本内容的代码得修改为:

with open("txt\PI_DESC.txt") as file_object:

contents = file_object.read()

print(contents)

给open参数传递的参数得给相对路径

在Windows中,使用反斜杠(\),但是由于python中,反斜杠被视为转义字符,在Windows最好在路径开头的单(双)引号前加上r

相对路径:即相对于程序文件的路径

绝对路径:即文本在硬盘上存储的路径

使用绝对路径的程序怎么写呢 ?

with open(r"D:\python\txt\PI_DESC.txt") as file_object:

contents = file_object.read()

print(contents)

1.3逐行读取

读取文件时,可能需要读取文件中的每一行,要以每一行的方式来检查文件或者修改文件,那么可以对文件对象使用for循环

file_path = 'txt\PI_DESC.txt'with open(file_path) as file_object:

for line in file_object:

print(line)

程序运行结果如下:

通过运行结果我们可以看出,打印结果中间有很多空白行,这些空白行是怎么来的呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加一个换行符,因此每行末尾就有2个换行符:一个来自文件,另外一个来自print,消除这些换行符,只需要使用方法rstrip()

file_path = 'txt\PI_DESC.txt'with open(file_path) as file_object:

for line in file_object:

print(line.rstrip())

打印结果

通过运行结果我们可以看出,打印结果中间有很多空白行,这些空白行是怎么来的呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加一个换行符,因此每行末尾就有2个换行符:一个来自文件,另外一个来自print,消除这些换行符,只需要使用方法rstrip()

file_path = 'txt\PI_DESC.txt'with open(file_path) as file_object:

for line in file_object:

print(line.rstrip())

打印结果

1.4创建一个包含文件各行内容的列表

使用关键字with时,open()返回的文件对象只能在with代码块可用,如果要在with代码块外访问文件的内容,可在with块中将文件各行存储在一个列表,并在with代码块外使用该列表

file_path = 'txt\PI_DESC.txt'with open(file_path) as file_object:

lines = file_object.readlines()for line in lines:

print(line.rstrip())

1.5使用文件的内容

在上面一节中我们提到把数据提取到内存中,那么我们就可以对数据进行随心所欲的 *** 作了

需要:将圆周率连在一起打印出来(删除空格),并打印其长度

file_path = 'txt\PI_DESC.txt'with open(file_path) as file_object:

lines = file_object.readlines()pi_str = ''for line in lines:

pi_str += line.strip()print(pi_str.rstrip())print(len(pi_str.rstrip()))

file_path = 'txt\PI_DESC.txt'with open(file_path) as file_object:

lines = file_object.readlines()pi_str = ''for line in lines:

pi_str += line.strip()print(pi_str.rstrip())print(len(pi_str.rstrip()))

注意最后print语句并没有缩进,如果是缩进的话就会每取一行打印一次

打印效果如下


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/8076301.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-13
下一篇2023-04-13

发表评论

登录后才能评论

评论列表(0条)

    保存