Ⅰ python读写文件
读文件
1)使用open()方法打开文件,返回一个文件对象
原型:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
举例:f = open('test.txt', 'r')
test.txt表示文件路径(包含文件名,这个file参数可以是绝对或者相对路径)
r表示是读文本文件,rb是读二进制文本文件。(这个mode参数默认值就是r)
2)使用close()方法关闭文件
f.close()
打开后的文件必须关闭,因为文件对象会占用系统资源,系统打开文件数量也就有限了
3)打开文件时的异常处理
f=open('test.txt', 'r')
f.read()
f.close()
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
文件读写时都有可能产生异常IOError(比如文件不存在),这样其后面的f.read(),f.close()就不会调用。为保证无论是否异常都可以关闭文件,一般使用try ... finally来处理:
try:
f = open('test.txt', 'r')
f.read()
finally:
if f:
f.close()
但这种写法过于繁琐,所以Python引入了with语句来自动调用close()方法:
with open('test.txt', 'r') as f:
f.read()
4)读文件 - read()、readline() 和 readlines()
read() 一次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件过大,内存不够,可以通过反复调用read(size)方法,每次最多读取size个字节的内容。
readline() 一次读取文件中一行内容,可反复调用
readlines() 一次读取所有内容并按行返回列表,该列表可以由for ... in ... 结构再进一步处理。
特别注意:
这三种方法是把每行末尾的'\n'也读进来了,如有需要就得我们手动去掉'\n'
with open('test.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].rstrip('\n')
写文件
1)写文件和读文件是一样的,唯一区别是open文件时,传入标识符不同,即'w'或者'wb'表示写文本文件或写二进制文件
f = open('test.txt', 'w')
f = open('test.txt', 'wb')
f = open('test.txt', 'a')
f.close()
特别注意:
1. 如果没有这个文件,会自动创建一个新文件;如果有,就会先把原文件的内容清空再写入;若不想清空原来的内容而是直接在后面追加新的内容,就用'a'这个模式
2. 写文件,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。
2)写文件 - write()、writelines()
write()方法和read()、readline()方法对应,是将字符串写入到文件中。
writelines()方法和readlines()方法对应,也是针对 列表 的操作。它接收一个 字符串行表 作为参数,将他们写入到文件中。
特别注意:
换行符不会自动的加入,需要显式的加入换行符。
f = open('test.txt', 'w')
f.writelines(["111\n", "222\n", "333\n"])
补充说明:
1)对于非默认编码(utf-8)的文件,需要open时添加encording参数,选择对应的编码方式
2)r+, w+, a+,可读可写
3)seek()方法,移动文件指针
seek(offset[, whence]) ,offset是相对于某个位置的偏移量。位置由whence决定,默认whence=0,从开头起;whence=1,从当前位置算起;whence=2相对于文件末尾移动,通常offset取负值。
Ⅱ python 一个文件太大+内存装不下+怎么读取 mongo
Python 环境下文件的读取问题,请参见拙文Python 基础 —— 文件
这是一道着名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件。
1. read() 接口的问题
f = open(filename, 'rb')
f.read()12
我们来读取 1 个 nginx 的日至文件,规模为 3Gb 大小。read() 方法执行的操作,是一次性全部读入内存,显然会造成:
MemoryError...12
也即会发生内存溢出。
2. 解决方案:转换接口
(1)readlines() :读取全部的行,构成一个 list,实践表明还是会造成内存的问题;
for line in f.reanlines(): ...1
2
(2)readline():每次读取一行,
while True:1
2
3
4
(3)read(1024):重载,指定每次读取的长度
while True: block = f.read(1024) if not block: break1
2
3
4
3. 真正 Pythonic 的方法
真正 Pythonci 的方法,使用 with 结构:
对可迭代对象 f,进行迭代遍历:for line in f,会自动地使用缓冲IO(buffered IO)以及内存管理,而不必担心任何大文件的问题。
There should be one – and preferably only one – obvious way to do it.
Ⅲ Python文件读写
常见的读写操作:
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
Ⅳ Python3读取大文件的方法
1.方法一:利用yield生成器
2. 方法二:利用open()自带方法生成迭代对象,这个是一行一行的读取
总结:二者的比较
方法一:可以灵活控制一次读取的size,在速度上较2有优势,适用于一些大的二进制文件,比如读取一些大的视频或者图片等。
方法二:在处理一些文本的时候感觉更加便利,按行读更容易对文本进行处理。
Ⅳ python读取大文件处理时使用多线程
如果有个很大的文件,几十G?,需要每次读取一部分,处理后再读取剩余部分。
with open as f 已经从内部处理难点,使用 for line in f 以迭代器的形式每次读取一行,不会有内存问题。
下面程序的思路是用一个列表存放读取到的数据,达到长度后就开始处理,处理完就清空列表,继续执行
Ⅵ Python读取文件内容的方法有几种
filename=open('i:\\install\\test.txt','r+')#读取xx路径xx文件;r+代表的是读写并存方式 print filename.read()#读取所有的文件
Ⅶ python对文件的读操作方法有哪些
摘要 1 文件读取全文本操作
Ⅷ Python中的文件读写-理论知识
Python处理两种不同类型的文件:二进制文件和文本文件。了解两者之间的差异很重要,因为它们的处理方式不同。
二进制文件
在正常计算机使用期间使用的大多数文件实际上是二进制文件,而不是文本。比如:Microsoft Word .doc文件实际上是一个二进制文件,即使它只有文本。
二进制文件的其他示例包括:
图像文件,包括.jpg,.png,.bmp,.gif,等。
数据库文件包括.mdb,.frm和.sqlite
文件,包括.doc,.xls,.pdf或者其他文件。
那是因为这些文件都有特殊处理的要求,需要特定类型的软件来打开它。例如,您需要Excel来打开.xls文件,并使用数据库程序来打开.sqlite文件。
文本文件
一方面,没有特定的编码,可以通过没有任何特殊处理的标准文本编辑器打开。但是,每个文本文件都必须遵守一组规则:
文本文件必须是可读的。他们可以(并且经常会)包含许多特殊编码,尤其是在HTML或其他标记语言中,但您仍然可以说出它的含义
文本文件中的数据按行组织。在大多数情况下,每一行都是一个独特的元素,无论是指令行还是命令。
此外,文本文件在每行的末尾都有一个看不见的字符,这使文本编辑器知道应该有一个新行。通过编程与这些文件交互时,您可以利用该字符。在Python中,它用“ n” 表示。
在哪里可以找到Python的文件I / O工具
在Python中工作时,您不必担心导入任何特定的外部库来处理文件。Python附带有“文件库”,文件I / O工具和实用程序是核心语言的内置部分。
但是在其他语言(如C ++)中,要处理文件,您必须通过包含正确的头文件来启用文件I / O工具#include <fstream>。如果您使用java编写代码,则需要使用该import java.io.*语句。
使用Python,就没有必要这样做,这是因为Python有一组内置函数,可以处理读取和写入文件所需的所有内容。
Ⅸ Python 拿来直接用的7个os读写文件的操作!网友:建议收藏!
在学习真实案例之前,我们先来了解一下Python文件操作的一些基本概念~~
如何创建读取和写出的文件对象,open()方法来搞定
他有两个参数,第一个就是读取的文件名称,第二个是可选的,指的是打开文件的模式,默认是读取文件。
当我们获取到读取文件对象fin之后我们就可以读取文件内容了,这里介绍两种方式。
第一种是直接读取文件内容,
第二种是按行读取文件内容。
区别在于如果你的文件非常大,如果直接读取效率会非常低下,甚至会撑爆内存。
所以按行读取按行处理就不会因为文件过大而产生问题了
文件读取完成之后写出文件有如下方式:
'\n'的意思是我们手动换行
最后关闭文件有两种方式
为什么要关闭文件呢?
如果不关闭他就会持续打开状态,琐事其他进程后者线程要操作它的时候就会报错
我们有时候写入非常大的数据的时候打开文件后会发现数据不是最新的?
这是因为python在写出文件是先写到内存中,等到一定的事件之后或者文件到达一定的数量之后才会写入到磁盘
所以我们如果想要看最新的数据,可直接调用如下方法
接下来我们使用数据进行测试
1. 文件读操作
文件读、写操作比较常见。读取文件,要先判断文件是否存在。
若文件存在,再读取;不存在,抛出文件不存在异常。
文件存在情况:
文件不存在情况:
open 后,务必要 close,这种写法有些繁琐,还容易出错。借助 with 语法,同时实现 open 和 close 功能,这是更常用的方法。
2.获取文件的后缀名
如何优雅地获取文件后缀名?os.path 模块,splitext 能够优雅地提取文件后缀。
3. 批量修改文件后缀名
修改之前
修改文件后缀名的文件方法如下:
从修改之后:
4. 获取文件名
有时拿到一个文件名时,名字带有路径。这时,使用 os.path、split 方法实现路径和文件的分离。
我们还可以直接使用使用os.path 模块,splitext 提取文件后缀名。
5.获取以指定后缀结尾的文件
当我们想要查询某路径下所有以固定后缀结尾的文件时,可以使用如下方法
6. 批量修改文件后缀名
后缀名批量修改,实现思路:
1. 遍历目录下的所有文件
2. 获取文件的后缀名
3. 如果后缀名命中为 old_ext,rename 重命名
defbatch_rename(work_dir, old_ext, new_ext):
"""
传递当前目录,原来后缀名,新的后缀名后,批量重命名后缀
7. 批量获取文件修改时间
os.walk 生成文件树结构,os.path.getmtime 返回文件的最后一次修改时间: