【问题标题】:Converting .txt file to .xls in Python在 Python 中将 .txt 文件转换为 .xls
【发布时间】:2011-11-10 03:24:27
【问题描述】:

我有一个确实是 csv 格式的文件,但它以 .txt 的形式交给我。我需要获取此文件并将其转换为 .xls 格式,以便将其上传到 Google Docs。目前我有下面的代码,但它会将包含所有内容的文件吐出到第一个单元格中,而不是为每个逗号值分解不同的单元格。有谁知道如何解决这个问题?

谢谢!

import os

fin = open(r"C:\Users\JohnDoe\Downloads\Report.txt", "r")
data_list = fin.readlines()
fin.close() # closes file

fout = open(r"C:\Users\JohnDoe\Desktop\Report.xls", "w")
fout.writelines(data_list)
fout.flush()
fout.close()

【问题讨论】:

  • 从您的问题中不清楚为什么您将其转换为xls,因为Google Docs 当然可以处理.csv。如果我认为您实际上不需要.xls 的假设是错误的,请告诉我。
  • 将文件重命名为 YourOriginalFileName.csv 然后在 Excel 中打开并将其保存为 xls 文件。这不会达到你想要的吗?或者您正在寻找实现自动化的方法?
  • @yasouser 谁说他有 Excel 的副本?如果需要自动化怎么办?

标签: python csv text-files xls


【解决方案1】:

仅将其重命名为 .xls 不会将其转换为 Excel 电子表格。但无论如何,您为什么要将其转换为 .xls 只是为了将其上传到 Google 文档?

如果是.csv,只需将文件重命名为.csv 并上传即可正确检测为电子表格。

使用os.rename:

import os

os.rename("C:\Users\JohnDoe\Downloads\Report.txt", 
          "C:\Users\JohnDoe\Downloads\Report.cvs")

如果你真的需要用 Python 来做。

如果您需要从文件中获取实际行而不是行:

from csv import reader

for row in reader(open(r"C:\Users\JohnDoe\Downloads\Report.txt", 'rb')):
    # do something with row

将为您提供每行的单元格列表。

如果您确实确实需要使用 Excel 电子表格,请参阅 http://www.python-excel.org/xlwt package

【讨论】:

    【解决方案2】:

    您的代码只是将 Report.txt 复制到 Report.xls 中

    在打开 Report.xls 时,Excel 将其识别为 csv 文件,但不将逗号识别为分隔符。

    您将需要使用某种库来编写正确的 Excel 文件。以 Word 的 COM 接口为例。

    【讨论】:

    • "将其识别为 csv 文件,但未将逗号识别为分隔符。"没有任何意义。要么它知道它是一个.csv 文件,在这种情况下它知道逗号是分隔符,要么它不知道它是一个.csv 文件。
    • Excel 可以将其识别为分隔符分隔值,但需要制表符分隔符或其他分隔符。至少 Openoffice 会记住上次选择的分隔符或自动检测分隔符。我不使用 Excel 本身,但我认为它做了类似的事情。
    【解决方案3】:

    尝试http://packages.python.org/openpyxl/ 或对于较旧的 excel 文件,请使用 pyExcelerator 查看此help page

    【讨论】:

    • pyExcelerator 已绝迹。 xlwt 是 pyExcelerator 的一个分支,具有错误修复和增强功能。查看@agf 的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    相关资源
    最近更新 更多