使用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 并选择 作为分隔符,然后选择 【参考方案1】:

您可以使用 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文件(制表符分隔)的主要内容,如果未能解决你的问题,请参考以下文章

如何将excel的数据输出到文本文件中并设定长

如何将HTML文件转化成excel的文件,

EXCEL转换CSV格式,里面的数值变乱码。

unotools - 尝试使用 python 将 ods 或 excel 文件转换为 csv

在Excel中如何将数字格式批量转换为文本格式,并且保留二位小数?

c语言将秒数转换为时间格式(24小时制,00:00:00格式)