Python读写文件(txt, csv等)小结
参考文章:python文件读写小结 - 周洋 - 博客园
Python读取文件的几种方法 - poowicat - 博客园
python读取文件 - 刘丧失 - 博客园
Python File(文件) 方法 | 菜鸟教程
目录
一、简介
二、示例
2.1 读文件
2.2 面试题示例:
2.3 写文件
三、代码示例:
四、读取csv文件
4.1 用csv库进行读取
4.2 用pandas库的csv_read函数读取
4.3 读取一部分数据
4.3.1. 读取某一列的数据
4.3.2 读取某一行的数据
4.3.3 将数据写入CSV文件:
一、简介
Python读取文件,完整的语法格式:
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 参数:
默认为文本模式,如果要以二进制模式打开,加上 b 。
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
file 对象 :
序号 | 方法及描述 |
---|---|
1 |
file.close() 关闭文件。关闭后文件不能再进行读写操作。 |
2 |
file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
3 |
file.fileno() 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
4 |
file.isatty() 如果文件连接到一个终端设备返回 True,否则返回 False。 |
5 |
file.next() 返回文件下一行。 |
6 |
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
7 |
file.readline([size]) 读取整行,包括 "\n" 字符。 |
8 |
file.readlines([sizeint]) 读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 |
9 |
file.seek(offset[, whence]) 设置文件当前位置 |
10 |
file.tell() 返回文件当前位置。 |
11 |
file.truncate([size]) 截取文件,截取的字节通过size指定,默认为当前文件位置。 |
12 |
file.write(str) 将字符串写入文件,返回的是写入的字符长度。 |
13 |
file.writelines(sequence) 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
二、示例
2.1 读文件
打开一个文件用open()方法(open()返回一个文件对象,它是可迭代的):
# r表示是文本文件,rb是二进制文件。(这个mode参数默认值就是r)
f = open('test.txt', 'r')
如果文件不存在,open()
函数就会抛出一个IOError
的错误,并且给出错误码和详细的信息说明文件不存在:
f=open('test.txt', 'r')
Traceback (most recent call last):File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
f.close()
由于文件读写时都有可能产生IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现:
try:f = open('/path/to/file', 'r')print(f.read())
finally:if f:f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with
语句来自动帮我们调用close()
方法:
with open('/path/to/file', 'r') as f:print(f.read())
python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。
- read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件大于可用内存,为了保险起见,可以反复调用
read(size)
方法,每次最多读取size个字节的内容。- readlines() 之间的差异是后者一次读取整个文件,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。
- readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。
注意:这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,需要我们手动去掉:
In[2]: with open('test1.txt', 'r') as f1:list1 = f1.readlines()
In[3]: list1
Out[3]: ['111\n', '222\n', '333\n', '444\n', '555\n', '666\n']
去掉'\n'
In[4]: with open('test1.txt', 'r') as f1:list1 = f1.readlines()
for i in range(0, len(list1)):list1[i] = list1[i].rstrip('\n')
In[5]: list1
Out[5]: ['111', '222', '333', '444', '555', '666']
对于read()和readline()也是把'\n'读入了,但是print的时候可以正常显示(因为print里的'\n'被认为是换行的意思):
In[7]: with open('test1.txt', 'r') as f1:list1 = f1.read()
In[8]: list1
Out[8]: '111\n222\n333\n444\n555\n666\n'
In[9]: print(list1)
111
222
333
444
555
666In[10]: with open('test1.txt', 'r') as f1:list1 = f1.readline()
In[11]: list1
Out[11]: '111\n'
In[12]: print(list1)
111
2.2 面试题示例:
有两个文件,每个都有很多行ip地址,求出两个文件中相同的ip地址:
要点:
- 用with
- 处理行末的'\n'
- 使用二分查找提高算法效率。
- 使用set快速去重
# coding:utf-8
import bisectwith open('test1.txt', 'r') as f1:list1 = f1.readlines()
for i in range(0, len(list1)):list1[i] = list1[i].strip('\n')
with open('test2.txt', 'r') as f2:list2 = f2.readlines()
for i in range(0, len(list2)):list2[i] = list2[i].strip('\n')list2.sort()
length_2 = len(list2)
same_data = []
for i in list1:pos = bisect.bisect_left(list2, i)if pos < len(list2) and list2[pos] == i:same_data.append(i)
same_data = list(set(same_data))
print(same_data)
2.3 写文件
写文件和读文件相同,唯一区别是调用
open()
函数时,传入标识符'w'
或者'wb'
表示写文本文件或写二进制文件:
>>> f = open('test.txt', 'w') # 若是'wb'就表示写二进制文件
>>> f.write('Hello, world!')
>>> f.close()
注意:'w'这个模式:如果没有文件,就创建一个;如果有,先把原文件的内容清空再写入新的内容。所以若不想清空原来的内容而是直接在后面追加新的内容,就用'a'这个模式。
可以反复调用
write()
来写入文件,但是务必要调用f.close()
来关闭文件。当写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再写入。只有调用close()
方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()
的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with
语句来得保险:
with open('test.txt', 'w') as f:f.write('Hello, world!')
python文件对象提供了两个“写”方法: write() 和 writelines():
- write()方法和read()、readline()方法对应,是将字符串写入到文件中。
- writelines()方法和readlines()方法对应,也是针对列表的操作。它接收一个字符串列表作为参数,将他们写入到文件中,换行符不会自动的加入,因此,需要显式的加入换行符:
f1 = open('test1.txt', 'w')
f1.writelines(["1", "2", "3"])
# 此时test1.txt的内容为:123# 需要显式的加入换行符
f1 = open('test1.txt', 'w')
f1.writelines(["1\n", "2\n", "3\n"])
# 此时test1.txt的内容为:
# 1
# 2
# 3
关于open()的mode参数:
- 'r':读
- 'w':写
- 'a':追加
- 'r+' == r+w(可读可写,文件若不存在就报错(IOError))
- 'w+' == w+r(可读可写,文件若不存在就创建)
- 'a+' ==a+r(可追加可写,文件若不存在就创建)
- 对应的,如果是二进制文件,就都加一个b:
- 'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'
file_obj.seek(offset,whence=0):
file_obj.seek(offset,whence=0)方法用来在文件中移动文件指针。offset表示偏移多少。可选参数whence表示从哪里开始偏移,默认是0为文件开头,1为当前位置,2为文件尾部。举例:
f = open("test1.txt", "a+")
print(f.read())
f.write('1')
f.seek(0, 0)# 把文件指针从末尾移到开头,没有这句话下面的read()就读不到正确的东西
print(f.read())
f.close()
注意:这个文件指针的改变只是作用于'r',对'w'和'a'不会起作用,如果是'w',那么write()永远都是从开头写(会覆盖后面对应位置的内容),是'a'时write()就永远都是从最后开始追加。
字符编码
要读取非UTF-8编码的文本文件,需要给open()
函数传入encoding
参数,例如,读取GBK编码的文件:
>>> f = open('test.txt', 'r', encoding='gbk')
>>> f.read()
'测试'
遇到有些编码不规范的文件,可能会遇到UnicodeDecodeError
,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()
函数还接收一个errors
参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
>>> f = open('test.txt', 'r', encoding='gbk', errors='ignore')
三、代码示例:
# -*- coding: utf-8 -*-# 一、使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。
#
# 二、需要导入import os
#
# 三、下面是逐行读取文件内容的三种方法:# 方法一:
def read_line():f = open("a.txt", encoding='utf-8') # 返回一个文件对象line = f.readline() # 调用文件的 readline()方法while line:# print(line,) # 后面跟 ',' 将忽略换行符print(line, end='') # 在 Python 3 中使用line = f.readline()f.close()# 使用withwith open("a.txt", encoding='utf-8') as f1:line = f.readline()while line:# print(line,) # 后面跟 ',' 将忽略换行符print(line, end='') # 在 Python 3 中使用line = f.readline()# 方法二:
def read_line_demo2():for line in open("a.txt", encoding='utf-8'):print(line, )# 使用withwith open("a.txt", encoding='utf-8') as f1:print(f1.readline(), )# 方法三:readlines
def read_lines_demo():f = open("a.txt", "r", encoding='utf-8')lines = f.readlines() # 读取全部内容 ,并以列表方式返回for line in lines:print(line)# 使用withwith open('test1.txt', 'r', encoding='utf-8') as f1:list2 = f1.readlines()for i in range(0, len(list2)):list2[i] = list2[i].strip('\n')# 方法四:(一次性读取整个文件内容:)
def read_whole_file_demo():file_object = open('a.txt', encoding='utf-8')try:all_the_text = file_object.read()print(all_the_text)finally:file_object.close()# 使用withwith open('test1.txt', 'r', encoding='utf-8') as f1:all_the_text = f1.read()print(all_the_text)# 五、区别对待读取文本和二进制:
def other():# 1、如果是读取文本# 读文本文件input = open('data', 'r')# 第二个参数默认为rinput = open('data')# 2、如果是读取二进制input = open('data', 'rb')# 读固定字节:chunk = input.read(100)if __name__ == '__main__':print('PyCharm')
四、读取csv文件
4.1 用csv库进行读取
import csvwith open('data.csv', 'r', encoding='utf-8') as csvfile:reader = csv.reader(csvfile)for row in reader:print(row)
4.2 用pandas库的csv_read函数读取
import pandas as pddf = pd.read_csv('data.csv')
print(df)
4.3 读取一部分数据
4.3.1. 读取某一列的数据
1> 直接读取
import csv
import pandas as pdwith open('test.csv','r') as f:reader = csv.reader(f)column = [row[1] for row in reader]print(column)
2>根据列属性读取
import pandas as pddatas = pd.read_csv('test.csv',usecols=['name','price','num'])
print(datas)
4.3.2 读取某一行的数据
要提取其中第二行,可以用下面的代码:
import csv
with open('A.csv','rb') as csvfile:reader = csv.reader(csvfile)for i,rows in enumerate(reader):if i == 2:row = rows
#coding = 'utf-8'
import csv
# 使用list,只能读取列,而且是全文读取,csv.reader会自动把CSV内容生成数组
'''
df = csv.reader(open('F:\c_database\c2015.csv'))
for data in df:print (data[3])
'''#如果要读取某行,必须将CSV内容生成 DICT字典(2维)
with open('F:\c_database\c2015.csv','r') as csvfile:reader = csv.DictReader(csvfile)for row in reader:if row['日期'] == '20150105':print (row)
4.3.3 将数据写入CSV文件:
f = open('C2105_P.csv','w')
writer = csv.writer(f)
for i in X:writer.writerow(i)
4.3.4 Matlab读取CSV文件
1、用csvread函数
注意:csvread函数只试用与用逗号分隔的纯数字文件第一种:M = CSVREAD(‘FILENAME’) ,直接读取csv文件的数据,并返回给M
第二种:M = CSVREAD(‘FILENAME’,R,C) ,读取csv文件中从第R-1行,第C-1列的数据开始的数据,这对带有头文件说明的csv文件(如示波器等采集的文件)的读取是很重要的。
第三种:M = CSVREAD(‘FILENAME’,R,C,RNG),其中 RNG = [R1 C1 R2 C2],读取左上角为索引为(R1,C1) ,右下角索引为(R2,C2)的矩阵中的数据。
Python读写文件(txt, csv等)小结相关推荐
- python导入csv文件-Python读写文件(csv、txt、excel)
大家做在数据处理的时候,肯定难免会与文件交互,那么对于指定的文件类型,我们如何操作呢? 1.python读写csv文件 import csv #python2可以用file替代open with op ...
- Python 文件操作中的读写模式:open(path, ‘-模式-‘,encoding=‘UTF-8‘)+python读写文件txt +文本数据预处理
python读写txt文件 文件的打开的两种方式f = open("data.txt","r") #设置文件对象 f.close() #关闭文件#为了方便,避免 ...
- python读写文件,CSV和Excel
json是特殊的字符串. 其实,csv也是一种字符串文件的格式,它组织数据的语法就是在字符串之间加分隔符-行与行之间是加换行符,同列之间是加逗号分隔. csv格式文件可以用任意的文本编辑器打开(如记事 ...
- python文件读取输出-Python 读写文件中数据
1 需求 在文件 h264.txt 中的数据如图1,读入该文件中的数据,然后将第1列的地址删除,然后将数据输出到h264_out.txt中: 图1 h264.txt 数据截图 图2 输出文件 h264 ...
- python读写文件的语句_用Python读写文件指南
用Python读写文件(指南) [TOC] 使用Python最常见的任务之一是读取和写入文件.无论是写入简单的文本文件,读取复杂的服务器日志,甚至是分析原始字节数据,所有这些情况都需要读取或写入文件. ...
- python文件对象提供了3个读方法、分别是-Python读写文件模式和文件对象方法实例详解...
本文实例讲述了Python读写文件模式和文件对象方法.分享给大家供大家参考,具体如下: 一. 读写文件模式 利用open() 读写文件时,将会返回一个 file 对象,其基本语法格式如: open ( ...
- python如何读写文件-Python读写文件
python读写文件是很常见的操作,而多数情况下是对纯文件的读写操作. 我们先看一下,纯文本是如何进行读写操作的. """ created by nzh Date: 20 ...
- python写文件读文件-Python 读写文件和file对象的方法(推荐)
1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...
- python读写文件实例_python读写文件的简单示例
这篇文章主要为大家详细介绍了python读写文件的简单示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 首先看一个例子: # 来自www.512 ...
最新文章
- <论文阅读>CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation via Global and...
- iOS new 和 alloc的区别
- Cisco ASA防火墙常用命令
- 机器学习基石13-Hazard of Overfitting
- [html] 可以给内联元素设置宽和高吗?为什么?
- C# 淘宝商品微信返利助手开发-(四)返利助手开发(2)淘宝分享的内容如何只取淘口令
- 【文末有福利】量子计算是对计算本质的发现
- 2025.wireshark工具使用
- 手里有20万,你会选择银行理财还是基金?
- Android学习之Intent使用
- 冒泡排序和选择排序的实现与比较
- i3wmvim终极配置
- Android HttpClient 与JSON解析
- 斐讯k1刷入Breed以及openwrt的教程
- Basic grammar of Python day2
- 区块链公司BitFury与联合国合作开展哈萨克斯坦的森林项目
- 矩阵内积、外积(克罗内克积)和Hadamard积
- RK3288源码编译
- 好用的AndroidStudio插件推荐
- 170 FPS!YolactEdge:边缘设备上的实时实例分割,已开源!