一、写入.txt文件
1.数据写入文件
在Python的open函数中,标识符可指定文件打开模式,如果需要将数据写入文件,只需要将标识符设置为写入模式(w)即可。
如果要写入的文件不存在,那么open函数将自动创建文件。要注意的是,如果文件已经存在,那么以写入模式写入文件时会先清空该文件。
>>>file_name = 'words.txt'
>>>f = open(file_name, 'w')
>>>f.write('Hello, world!')
>>>f.close()
在工作目录下打开words.txt文档来查看写入文档的内容。
word.txt
Hello, world! |
标识符w和wb表示写文本文件和写二进制文件(在r后面添加b表示要读二进制数据)。如果需要将数值型数据写入文本文件,必须先用str函数将数值型数据转换为字符串格式。
>>> file_name = 'data.txt'
>>> f = open(file_name, 'w')
>>> data = list(range(1,11))
>>> f.write(data)
Traceback(most recent call last):
File"Ch7_read.py", line 12, in <module>
f.write(data)
TypeError: write() argument must be str, notlist
>>>f.write(str(data))
>>>f.close()
写入内容后可查看写入的文档。
data.txt
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
2.使用with语句写入.txt文件
要写入特定编码的文本文件,需要给open函数传入encoding参数,将字符串自动转换成指定编码。默认encoding参数为UTF-8。要读取非UTF-8编码的文本文件,例如读取GBK编码的文件,需要给open函数传入encoding参数。
>>>file_name = 'words.txt'
>>>f = open(file_name, 'w', encoding ='gbk')
>>>f.write('Hello, world!')
3.对文件添加内容
在编写代码时,可能需要给文件添加内容,但不覆盖文件原内容,这时候需要以附加模式(a)打开文件,此时写入的内容会附加到文件末尾,而不会覆盖原内容。
>>>file_name = 'words.txt'
>>>with open(file_name, 'a') as f:
... f.write("What's yourfavourite language?\n")
... f.write('My favouritelanguage is Python too.\n')
将添加的两行字符串附加到文件的末尾。
words.txt
Hello, world! I love Python! What's your favourite language? My favourite language is Python too. |
二、duxi.csv文件
逗号分隔值(Comma-Separated Values,CSV)有时也称为字符分隔值,是一种通用的、相对简单的文件格式,常应用于在程序之间转移表格数据。
.csv文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的分隔符是逗号或制表符。
在编写程序时,可能需要将数据转移到.csv文件里面,此时可以考虑使用Python的内置模块——csv模块。在程序中,用命令import csv可直接调用csv模块进行.csv文件的读写。
1.读取csv数据
在读取csv数据之前,先选择一个用CSV文件格式储存的数据作为演示的例子,这里选择iris数据集。iris数据集即鸢尾花卉数据集,是常用的分类实验数据集,由Fisher在1936年收集整理。数据集包含150个样本,分为3类(Setosa、Versicolour、Virginica),每类50个样本,每个数据包含4个属性——花萼长度、花萼宽度、花瓣长度、花瓣宽度。
读取.csv文件的方法有两种。第一种是使用csv.reader函数,接收一个可迭代的对象(比如.csv文件),能返回一个生成器,从其中解析出csv的内容。
>>>import csv
file_name ='C:\\Users\\45543\\Desktop\\iris.csv'
>>>withopen(file_name, 'r') as f:
... reader = csv.reader(f)
... iris= [iris_item for iris_item in reader]
>>>print(iris)
[['', 'Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width','Species'],
['1', '5.1', '3.5', '1.4', '0.2', 'setosa'],
['2', '4.9', '3', '1.4', '0.2', 'setosa'],
['3', '4.7', '3.2', '1.3', '0.2', 'setosa'],
…]
第二种方法是使用csv.DictReader函数,该函数与csv.reader函数类似,接收一个可迭代的对象,能返回一个生成器,但是返回的每一个单元格都放在一个字典的值内,而字典的键则是这个单元格的标题(即列头)。
>>>import csv
file_name = 'C:\\Users\\45543\\Desktop\\iris.csv'
>>>with open(file_name, 'r') as f:
... reader = csv.DictReader(f)
... iris1 = [iris_item foriris_item in reader]
>>>print(iris1)
[OrderedDict([('', '1'), ('Sepal.Length', '5.1'),('Sepal.Width', '3.5'), ('Petal.Length', '1.4'), ('Petal.Width', '0.2'),('Species', 'setosa')]),
OrderedDict([('', '2'), ('Sepal.Length', '4.9'),('Sepal.Width', '3'), ('Petal.Length', '1.4'), ('Petal.Width', '0.2'),('Species', 'setosa')]),
OrderedDict([('', '3'), ('Sepal.Length', '4.7'),('Sepal.Width', '3.2'), ('Petal.Length', '1.3'), ('Petal.Width', '0.2'),('Species', 'setosa')]),…]
如果用csv.DictReader函数读取.csv文件的某一列,则可以用列的标题(Sepal.Length)查询。
>>>with open(file_name, 'r') as f:
... reader = csv.DictReader(f)
... column = [iris_item['Sepal.Length'] for iris_item in reader]
>>>print(column)
['5.1', '4.9', '4.7', '4.6', '5', '5.4',…]
2.写入.csv文件
对于列表形式的数据,除了csv.write函数外,还需要用到writerow函数将数据逐行写入.csv文件。利用csv.write函数将数据写入.csv文件的示例代码。
>>>import csv
file_name ='C:\\Users\\45543\\Desktop\\test.csv'
>>>with open(file_name, 'w', newline = '') as f:
... write_csv = csv.writer(f)
... write_csv.writerow(iris)
至于字典形式的数据,csv模块提供了csv.DictWriter函数,除了提供open函数的参数外,还需要输入字典所有键的数据,然后通过writeheader函数在文件内添加标题,标题内容与键一致,最后使用writerows函数将字典内容写入文件。
>>>import csv
file_name ='C:\\Users\\45543\\Desktop\\test.csv'
>>>my_key = [] # 键的集合
>>>for i in iris1[0].keys():
... my_key.append(i)
>>>with open(file_name, 'w', newline = '') as f:
... write_csv = csv.DictWriter(f, my_key)
... write_csv.writeheader() # 输入标题
... write_csv.writerows(iris1) # 输入数据
文章未经博主同意,禁止转载!