下面是使用Python循环读取txt文档并转换成CSV的攻略:
1. 确定文件路径和文件名
首先,要确定你的TXT文件的路径和名称,以及你转换后要保存CSV文件的路径和名称。在本文中,我们将假设 TXT 文件名为 example.txt
,TXT文件所在的目录为 ./data/
,我们将保存转换后的 CSV 文件到 ./output/
目录下,命名为 output.csv
。
2. 导入需要使用的 Python 库
Python 中有一些库可以协助我们进行 TXT 到 CSV 的转换,其中 pandas
是非常流行的数据处理库,可以帮助我们读取和写入 CSV 文件。
import pandas as pd
3. 读取 TXT 文件
在 Python 中,我们可以使用 open()
函数来打开一个文件,参数包括文件名和打开方式('r' 代表只读模式,即不能在文件中写入数据)。
file_path = "./data/example.txt"
with open(file_path, 'r') as f:
# Further code will go here
pass
现在我们已经打开了文件,但我们还没有真正地读取它。要读取 TXT 文件,我们需要使用 readlines()
方法。readlines()
方法将会返回一个字符串列表,其中每一个字符串是 TXT 文件中的一行。代码示例:
file_path = "./data/example.txt"
with open(file_path, 'r') as f:
lines = f.readlines()
现在,我们已经能够读取文件内容存到lines数组中了。
4. 处理数据并转成 DataFrame
在处理TXT文件字符串时,我们可能需要进行一些操作,例如拆分数据、提取某些数据等等,然后将它们存储在一个 Pandas DataFrame 中。
举个例子,如果要读取的 TXT 文件包含下面两行内容:
1, 102, 0.25
2, 225, 0.36
我们可以使用 split()
方法将其拆分为一个个的数值,然后存放入一个二维数组中,如下所示:
data = []
for line in lines:
row = line.strip().split(",")
row = [int(x) if x.isdigit() else float(x) for x in row]
data.append(row)
此处的 strip()
方法将会删除每行字符串中的空格和换行符。split()
方法将会将每行文本按照逗号进行拆分,并将拆分的结果存到 row
数组中。isdigit()
方法判断是否数字,将数字转换成 int
类型,其他情况转换为 float
类型。最后,我们将每一行数据存放在一个大数组 data
中。
将数据存储到 DataFrame 中非常简单,只需使用 pd.DataFrame()
来创建一个 DataFrame 对象,代码示例如下:
df = pd.DataFrame(data, columns=["col1", "col2", "col3"])
这里,我们提供了一个列名称列表 ["col1", "col2", "col3"]
,它与数组 data
的第二个维度完全匹配。这将使每列数据具有正确的名称。
5. 将 DataFrame 转换到 CSV 文件
最后一步是将我们的 DataFrame 对象转换为 CSV 文件,并将其保存到磁盘上。为此,我们可以使用 to_csv()
方法,代码示例如下:
output_path = "./output/output.csv"
df.to_csv(output_path, sep=",", index=False)
此处,我们定义了输出文件的路径和名称,以及我们想使用的逗号分隔符。index=False
参数会忽略 DataFrame 的索引值。这将把 DataFrame 转换为 CSV 并将输出文件保存到磁盘上。
完整代码:
import pandas as pd
file_path = "./data/example.txt"
with open(file_path, 'r') as f:
lines = f.readlines()
data = []
for line in lines:
row = line.strip().split(",")
row = [int(x) if x.isdigit() else float(x) for x in row]
data.append(row)
df = pd.DataFrame(data, columns=["col1", "col2", "col3"])
output_path = "./output/output.csv"
df.to_csv(output_path, sep=",", index=False)
以上是一个简单的例子。下面再提供一个稍微复杂一些的例子,供参考。
假设我们的 TXT 文件包含下面两行内容:
1, 102, 0.25. "Description 1"
2, 225, 0.36. "Description 2"
其中,列 "col4" 中包含用引号括起来的字符串描述。我们需要将这个字符串去掉,只留下数值。我们可以使用正则表达式 "[^"]*"
来匹配这个字符串,然后替换为空。
import pandas as pd
import re
file_path = "./data/example2.txt"
with open(file_path, 'r') as f:
lines = f.readlines()
data = []
for line in lines:
row = line.strip().split(",")
row = [int(x) if x.isdigit() else float(x) if re.match("^[-+]?\d*\.\d+|[-+]?\d+", x) else re.sub('".*"', '', x) for x in row]
data.append(row)
df = pd.DataFrame(data, columns=["col1", "col2", "col3", "col4"])
output_path = "./output/output2.csv"
df.to_csv(output_path, sep=",", index=False)
其中 re.match("^[-+]?\d*\.\d+|[-+]?\d+", x)
用于验证数值,re.sub('".*"', '', x)
用于删除双引号中的字符串。
希望这篇文章对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 循环读取txt文档 并转换成csv的方法 - Python技术站