使用python将文本文件转换为excel文件(制表符分隔)
Posted
技术标签:
【中文标题】使用python将文本文件转换为excel文件(制表符分隔)【英文标题】:Text file to a excel file (tab delimited) with python 【发布时间】:2021-10-14 13:39:33 【问题描述】:我有一个像这样的 txt 文件
1000 lewis hamilton 36
1001 sebastian vettel 34
1002 lando norris 21
我希望它们看起来像这样
我尝试了here 中的解决方案,但它给了我一个空白的 excel 文件,并在尝试打开它时出错
超过一百万行,每行包含大约 10 列
最后一件事我不是 100% 确定它们是否是制表符分隔的,因为有些列看起来它们之间的空间比其他列多,但是当我按下退格键时,一旦它们相互粘连,我猜是
【问题讨论】:
您可以在 pandas 中使用空格作为分隔符打开它,然后保存为 CSV(逗号分隔值)或 TSV(制表符分隔值)。 Excel 将愉快地打开其中任何一种格式。 打开 Excel 并选择您可以使用 pandas read_csv
读取您的 txt 文件,然后将其保存为带有 .to_excel
的 excel 文件
df = pd.read_csv('your_file.txt' , delim_whitespace=True)
df.to_excel('your_file.xlsx' , index = False)
这里有一些文档:
pandas.read_csv : https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html
.to_excel : https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_excel.html
【讨论】:
OP 说他们不知道它是否实际上是制表符分隔的。使用delim_whitespace=True
可能会更好。另外,如果您使用to_excel
,为什么要使用.csv
扩展?
对于 .csv 扩展名是错误的 ^^ 而对于 delim 你是对的【参考方案2】:
如果不确定字段是如何分隔的,可以使用 '\s' 以空格分隔。
import pandas as pd
df = pd.read_csv('f1.txt', sep="\s+", header=None)
# you might need: pip install openpyxl
df.to_excel('f1.xlsx', 'Sheet1')
随机分隔字段示例(f1.txt):
1000 lewis hamilton 2 36
1001 sebastian vettel 8 34
1002 lando norris 6 21
如果您有一些行的列比第一行多,导致:
ParserError:标记数据时出错。 C 错误:预计第 5 行中有 5 个字段,看到 6
您可以使用以下方法忽略这些:
df = pd.read_csv('f1.txt', sep="\s+", header=None, error_bad_lines=False)
这是一个数据示例:
1000 lewis hamilton 2 36
1001 sebastian vettel 8 34
1002 lando norris 6 21
1003 charles leclerc 1 3
1004 carlos sainz ferrari 2 2
最后一行将被忽略:
b'跳过第 5 行:预期 5 个字段,看到 6\n'
【讨论】:
这个与我的小例子一起工作,所以谢谢你。我不知道你是否熟悉它,但我有一个错误说 pandas.errors.ParserError: Error tokenizing data。 C 错误:预计第 4 行中有 19 个字段,看到 20 个我认为这是因为即使有 18 或 19 列,有些列仍然有 2 或 3 个单词来解决这个问题? 您可以尝试:pd.read_csv('f1.txt', sep="\s+", header=None, error_bad_lines=False) 跳过这些行。 所以如果我使用这个,那些行会消失吗?这不是我想要的 然后你应该检查那些行(使用警告'skipping line LINE')并寻找一些有助于拆分列的模式。你能在这里举一些这些行的例子吗? 我当然会去,但是行太长,不适合这里,所以这里是图片:这是前 4 行的样子 imgur.com/a/raL9GsG 这是我运行代码时发生的情况这些行imgur.com/a/fAi3BeF(程序删除了第 4 行,因为在日期之后它有一个额外的文本)这就是我想要的 imgur.com/a/fg4uFTg 现在对于第 4 行我们可以删除那个额外的文本,或者我们可以把它和下一个他们两个我都可以以上是关于使用python将文本文件转换为excel文件(制表符分隔)的主要内容,如果未能解决你的问题,请参考以下文章
unotools - 尝试使用 python 将 ods 或 excel 文件转换为 csv