Python 逐行读取txt 文件并生成列表


前言

我们在编写一些自动化脚本的时候,为了方便,经常需要以txt 文件作为数据输入,今天就跟大家讨论一下如何对txt 文件进行读取并生成对应的列表等程序可操作的数据载体
在这里插入图片描述

开始

1. 载入文件

这步就大家比较熟悉,文件操作中最基本的了。

因为我们只需要读取文件,并不需要写入文件,所以在这里指定mode="r" 为只读模式(默认)。

f = open("C:/foo.txt", "r",encoding='utf-8')

此时就有了这个txt 文件的数据输入流了。

2. 读取数据流

读取数据的方法主要有三个,分别是read()readline()readlines()

方法作用
read()从文件读取指定的字节数,如果未给定或为负则读取所有。
readline()读取整行,包括 “\n” 字符。
readlines()读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

接下来简单展示一下这三种方法的区别:
这是foo.txt 中的内容

("祖安", 1000)
("诺克萨斯", 900)
("艾欧尼亚", 880)
("暗影岛", 750)
("征服之海", 620)
("黑色玫瑰", 600)
("德玛西亚", 500)
("裁决之地", 440)
("圣安地列斯", 400)
("自由城", 350)
("供电所", 300)
("影流", 200)
("荆棘坎坷", 180)
("永不言弃", 100)
  1. read()
    txt 数据格式一致,返回str 类型数据
    在这里插入图片描述
  2. readline()
    只读取一行(包括换行),返回str 类型数据
    在这里插入图片描述
  3. readlines()
    全部读取,返回list 类型数据
    在这里插入图片描述

3. 数据处理

根据上一步,我们可以得到多种形式的数据类型,从而根据我们的需求进行多种处理。

大家可以看到,我的foo.txt 中的数据是满足元组形式的,那我就试着将foo.txt 文件中的字符串类型数据转变成元组吧:

line = f.readline() # 读取一行
tu = eval(line) # 转为元组形式
print(tu)
print(type(tu))

输出:
在这里插入图片描述
若需要全部数据都逐行转变为元组,然后整体串成一个列表:

txt_tables = []
f = open("C:/foo.txt", "r",encoding='utf-8')
line = f.readline() # 读取第一行
while line:
    txt_data = eval(line) # 可将字符串变为元组
    txt_tables.append(txt_data) # 列表增加
    line = f.readline() # 读取下一行
print(txt_tables)

之所以while 循环中的f.readline() 能够不断读取下一行,是因为当我们每次执行完一次该语句之后,文件输入流的指针都会移动到下一行的起始位,所以每次再次执行,都是从下一行的第一个字符开始读取。

输出:
在这里插入图片描述

4. 关闭文件

是的,不要忘了关闭文件流:

f.close()
  • 66
    点赞
  • 403
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: Python提供了多种方法用来读取和写入文件。要读取txt文件,可以使用open()函数来打开文件读取内部内容。要生成csv文件,可以使用csv模块来处理和写入数据。 首先,我们需要通过open()函数打开txt文件,并使用readlines()方法读取文件的所有内容。readlines()方法会返回一个包含每行文本的列表。接下来,我们可以使用csv模块来创建并写入csv文件。 下面是一个示例代码: ```python import csv # 打开并读取txt文件 with open('input.txt', 'r') as file: lines = file.readlines() # 创建并写入csv文件 with open('output.csv', 'w', newline='') as file: writer = csv.writer(file) for line in lines: # 假设每行txt文件内容以逗号分隔 data = line.strip().split(',') writer.writerow(data) ``` 在上面的代码中,我们首先使用open()函数打开名为input.txttxt文件,并读取其中所有内容存储在lines列表中。然后,我们使用open()函数创建名为output.csv的csv文件,并使用csv.writer()函数来创建一个写入器对象writer。接下来,我们使用for循环遍历lines列表中的每一行,将每行的文本内容拆分为以逗号分隔的数据,并使用writerow()方法将数据写入csv文件中。 注意,上述示例代码假设txt文件中每行内容以逗号分隔。如果txt文件中的分隔符是其他字符,需要相应地修改代码。 最后,运行代码后,将会生成名为output.csv的csv文件,其中包含从txt文件读取的数据。 ### 回答2: 要用Python读取txt文件生成csv文件,首先需要导入`csv`和`os`模块。`csv`模块提供了用于读写csv文件的功能,而`os`模块用于处理文件路径。 下面是一个示例代码,假设我们要读取一个名为`input.txt`的txt文件,并将其内容写入名为`output.csv`的csv文件中: ```python import csv import os # 指定txt文件的路径 txt_file = 'input.txt' # 指定csv文件的路径 csv_file = 'output.csv' # 判断txt文件是否存在 if os.path.exists(txt_file): # 打开txt文件 with open(txt_file, 'r') as txt: # 创建csv文件并将内容写入 with open(csv_file, 'w', newline='') as csv_file: writer = csv.writer(csv_file) # 逐行读取txt文件内容 for line in txt: # 将每行内容按照指定分隔符进行分割 split_line = line.strip().split('\t') # 将分割后的内容写入csv文件 writer.writerow(split_line) print(f'{txt_file}已成功转换为{csv_file}') else: print(f'{txt_file}不存在!') ``` 在代码中,我们使用`open()`函数打开txt文件,并使用`with`语句来确保资源的正确释放。然后,我们使用`csv.writer`创建一个csv writer对象,并逐行读取txt文件内容。我们可以选择不同的分隔符`split_line = line.strip().split('\t')`来将每行内容进行分割,默认使用制表符进行分割。 最后,我们使用`writer.writerow()`将分割后的内容写入csv文件。要注意将每个字段作为列表传递给`writer.writerow()`函数。如果输入的txt文件中包含多个字段,确保分割后的列表与csv文件的列对应。 执行完上述代码后,将生成一个名为`output.csv`的csv文件,其中包含了从txt文件读取的内容。 ### 回答3: 使用Python读取txt文件生成csv文件非常简单。首先,我们需要导入`csv`模块和`pandas`模块。接下来,我们打开txt文件逐行读取其中的内容,并将内容存储到一个列表中。然后,我们创建一个csv文件,将列表中的内容写入该文件。最后,我们关闭文件。以下是具体的步骤: ```python import csv import pandas as pd # 打开txt文件逐行读取内容到列表 txt_file = open("input.txt", "r") lines = txt_file.readlines() txt_file.close() # 创建csv文件,写入内容 csv_file = open("output.csv", "w") writer = csv.writer(csv_file) for line in lines: row = line.strip().split() # 将行内容分割成列表 writer.writerow(row) csv_file.close() # 创建DataFrame并保存为csv文件 df = pd.DataFrame(lines) df.to_csv("output.csv", index=False, header=False) ``` 需要注意的是,上述代码中的"input.txt"和"output.csv"是示例文件名,你可以根据实际情况修改这些文件名。另外,逐行读取txt文件的方法可能因为文件内容的具体格式而有所变化,你可以根据实际情况对代码进行相应的修改。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺亚方包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值