【问题标题】:Convert CSV file to xlsx file Python将 CSV 文件转换为 xlsx 文件 Python
【发布时间】:2018-07-22 17:05:47
【问题描述】:

大家好,我正在寻找我的代码的解决方案,我尝试将 CSV 文件转换为 XLSX 文件,并且我的所有数据都被缩减为由; 分隔的一列。 (见下图)

您能否帮我解决两个代码之一,以便在转换等于 csv 文件时使数据表示? (见图片)

以下两个代码给出相同的结果:(重要的是,我在 Jupyter Notebook 上使用 Python 3.6 env):


import os
import glob
import csv
from xlsxwriter.workbook import Workbook


for csvfile in glob.glob(os.path.join('.', 'LOGS.CSV')):
    workbook = Workbook(csvfile[:-4] + '.xlsx')
    worksheet = workbook.add_worksheet()
    with open(csvfile, 'r') as f:
        reader = csv.reader((line.replace('\0','-') for line in f))
        for r, row in enumerate (reader):
            for c, col in enumerate(row):
                worksheet.write(r, c, col)
    workbook.close()

import os
import csv
import sys

from openpyxl import Workbook

data_initial = open("new.csv", "r")
sys.getdefaultencoding()
workbook = Workbook()
worksheet = workbook.worksheets[0]
with data_initial as f:
    data = csv.reader((line.replace('\0','') for line in data_initial), delimiter=",")
    for r, row in enumerate(data):
        for c, col in enumerate(row):
            for idx, val in enumerate(col.split('/')):
                cell = worksheet.cell(row=r+1, column=c+1)
                cell.value = val
workbook.save('output.xlsx')

这是我的 CSV 文件数据组织:

这就是我将它转换为 XLSX 时得到的结果:

从 cmets 编辑

好的,所以我使用了@DeepSpace 的program

 import pandas as pd

 pd.read_csv('C:/Users/Pictures/LOGS.CSV')
   .to_excel('C:/Users/Pictures/excel.xlsx')

我仍然得到这个:

好的解决方案: 转换很棒。但在我的情况下,第一列以某种方式移动。 Data num String 什么都没有,第一列是它的值...(见下图)

 import pandas as pd
    filepath_in = "C:/Users/Pictures/LOGS.csv"
    filepath_out = "C:/Users/Pictures/excel.xlsx"
    pd.read_csv(filepath_in, delimiter=";").to_excel(filepath_out)

【问题讨论】:

  • 如果你不介意安装新包的开销,整个逻辑基本上可以减少到 1-2 行代码:import pandas as pd ; pd.read_csv('/path/to/csv').to_excel('/path/to/excel.xlsx')
  • 看起来输出分隔符是分号。是否有理由将其更改为逗号?
  • DeepSpace 感谢快速响应并提供帮助。但是它仍然无法与您的程序一起使用,您还有其他想法吗? : 将 pandas 导入为 pd ; pd.read_csv('/path/to/csv').to_excel('/path/to/excel.xlsx')

标签: python python-3.x python-2.7 csv xlsx


【解决方案1】:

您的文件存在问题。重命名或save them as .txt files first。然后如 cmets 中所述,使用 pandas (@DeepSpace) 并指定分隔符 (@Marichyasana)。

给定

一个由分号分隔的列重命名文本文件(例如LOGS1.txt),例如:

0;2;DT#1970-01-01-00:46:09;55;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
1;2;DT#1970-01-01-00:46:25;71;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
2;2;DT#1970-01-01-00:46:28;74;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
3;2;DT#1970-01-01-00:46:30;76;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
4;2;DT#1970-01-01-00:46:32;78;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
5;2;DT#1970-01-01-00:46:34;80;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0
...

代码

import pandas as pd


filepath_in = "C:/Users/Pictures/LOGS1.txt"
filepath_out = "C:/Users/Pictures/excel.xlsx"
pd.read_csv(filepath_in, delimiter=";").to_excel("foo.xlsx", index=False)

对第二个文件 (LOGS2.txt) 应用相同的过程。

【讨论】:

  • 谢谢帮助,顺便说一句,我的第一个列被移动了,它只是我的标题字符串下的一个白色单元格,你知道为什么吗?= (@pylang)
  • @MarcoPolo11 我不确定。我已经对其进行了测试,如果没有extra parameters,它仍然应该可以。你的 csv 看起来很奇怪。您可以将您的 csv 作为纯文本文件发布,即在 good 文本编辑器中打开它并发布结果。您应该会看到列之间带有分号的纯文本。
  • 完成希望你能解决我的问题。感谢快速响应:) @pylang
  • 您的文件不是真正的 csv 文件。请注意,在 Excel 中,您的所有数据都收集在第一列中。最好将它们重命名为 LOGS1.txtLOGS2.txt。查看更新。
  • 酷@pylang thx 帮助它的工作。最后一件事,你知道如何删除一整列和我指定的列,以csv格式或使用python的xlsx?