【问题标题】:Read data from excel and write as CSV format to a file - Python从 excel 读取数据并以 CSV 格式写入文件 - Python
【发布时间】:2017-11-02 20:38:16
【问题描述】:

我有一个 5 行 5 列的 Excel 表,其值如下:

Time   Launch   Login    Password    Signout
00:01   1.26     1.56      5.24        12.3
00:02   1.22     1.55      5.34        2.35
00:03   1.36     1.53      1.24        2.13
00:05   1.46     1.26      2.24        1.32

如何将上述数据转换为 csv 格式并将其写入文本文件。我可以从 excel 中读取它们,但是当我写的时候,它们都被合并了。

输出格式:

Time,Launch,Login,Password,Signout
00:01,1.26,1.56,5.24,12.3
00:02,1.22,1.55,5.34,2.35
00:03,1.36,1.53,1.24,2.13
00:05,1.46,1.26,2.24,1.32

我的代码:

workbook3 = xlrd.open_workbook('C:\Users\aa\Desktop\Report3.xls', logfile=open(os.devnull, 'w'))
worksheet3 = workbook3.sheet_by_index(0)
num_cols3 = worksheet3.ncols
num_rows3 = worksheet3.nrows
for row_index3 in range(0, num_rows3):
    for col_index3 in range(0, num_cols3):
        cell_val= worksheet3.cell(row_index3, col_index3).value
        with open("C:\Users\aa\Desktop\outputfile.txt", 'a') as f:
            f.write(cell_val)
print "Write Completed" 

请指导。

【问题讨论】:

  • 也许你应该使用';'而不是“,”作为列分隔符?在多个语言环境中,当您在 Excel 中打开 csv 时会出现这种情况。
  • 我正在从 excel 中读取内容并将其重新写入文本文件,这是否会有所作为?我仍然坚持将它们转换为 csv 格式。

标签: python excel csv xlrd


【解决方案1】:

您可以尝试使用熊猫。它让你想做的事情变得超级简单。

import pandas as pd
filename = "filename.xlsx"
data = pd.read_excel(filename).to_csv(filename.replace(".xlsx", ".csv"))

另外,IMO 更容易将所有数据收集到二维数组中。所以像

data = []
for row_index3 in range(0, num_rows3):
    row = []
    for col_index3 in range(0, num_cols3):
        row.append(worksheet3.cell(row_index3, col_index3).value)
    data.append(row)
with open("C:\Users\aa\Desktop\outputfile.txt", 'w') as f: 
    f.write("\n".join(','.join(map(str, row)) for row in data))
print "Write Completed" 

【讨论】:

  • 谢谢,我找到了解决方案。但这里的一个问题是逗号 , 即使在一行的最后一个值之后也存在。知道如何克服吗?
  • 您可以在行上使用 ','.join,而不是在每个值后写一个逗号。我编辑了我的答案以向您展示我的意思。
  • 杰克,如果我想使用 pandas 将转换后的文件写入不同的位置,我该怎么做?
  • 只需将文件名替换为新路径即可。对不起,如果我没有说清楚。 data = pd.read_excel(filename).to_csv("C:\Users\aa\Desktop\outputfile.txt")。文档:pandas.pydata.org/pandas-docs/version/0.20.3/generated/…
  • 最后一个查询,我看到第一个新列添加了序列号。我怎样才能删除它?
【解决方案2】:

使用来自 python 运行时的模块 csv https://docs.python.org/2/library/csv.html

import csv
with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

【讨论】:

  • 谢谢,我找到了解决方案。但这里的一个问题是逗号 , 即使在一行的最后一个值之后也存在。知道如何克服吗?
【解决方案3】:

我能够得到这个答案。代码如下。

workbook3 = xlrd.open_workbook('C:\Users\aa\Desktop\Report3.xls', logfile=open(os.devnull, 'w'))
worksheet3 = workbook3.sheet_by_index(0)
num_cols3 = worksheet3.ncols
num_rows3 = worksheet3.nrows
f = open("C:\Users\aa\Desktop\outputfile.txt", 'a')
for row_index3 in range(0, num_rows3):
    for col_index3 in range(0, num_cols3):
        cell_val= worksheet3.cell(row_index3, col_index3).value
        f.write(cell_val+",")
    f.write("\n")       
print "Write Completed"

但这里的一个问题是逗号, 即使在行的最后一个值之后也存在。知道如何克服吗?

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 2021-04-28
    • 2021-11-23
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多