Python文件读取

一、写入.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)                 # 输入数据


文章未经博主同意,禁止转载!

微笑


猜你喜欢

转载自blog.csdn.net/qq_40304090/article/details/79499434