将.csv数据重写到文件会在python中创建artifacted第一列

时间:2016-07-12 18:20:09

标签: python python-3.x csv

我从多个REST端点获取csv中的数据,尝试将列标题添加到数据中,并将数据中的分隔符从分号(;)更改为逗号(,),以便它们可以通过以下方式正确格式化: Excel中。

注意:下面代码中的x是链接URI列表,省略号替换了用于发现和拉取链接的代码。

from bs4 import BeautifulSoup
import openpyxl
from html.parser import HTMLParser
from urllib.request import urlopen
from urllib import parse
import logging
import csv
...
...
for link in links:
    linkContent = urlopen(link)
    htmlBytes = linkContent.read()
    htmlString = htmlBytes.decode("utf-8")
    targetFile = open(str(x[link]) + '.csv', 'w')
    targetFile.write('Date;StartTime;EndTime;Environment;Domain;DeployID;Module;Status;BuildVersion;DeployType;DeployStart\n')
    targetFile.write(htmlString)
    targetFile.close()

for file in x:
    with open(str(x[file]) + '.csv', newline='') as csvFile:
        reader = csv.reader(csvFile,delimiter=";")
        data = [line for line in csvFile]

    datalen= len(data)
    for i in range(datalen):
        data[i] = data[i].replace(";", ",")
        data[i] = data[i].replace(" ","")

    with open(str(x[file]) + '.csv', 'w') as csvFile:
        w=csv.writer(csvFile,delimiter=',',quoting=csv.QUOTE_NONE,escapechar=' ')
        w.writerows([data])

不幸的是,这会在第一行之后的每一行之前产生一个不必要的逗号,我不确定原因。

Date,StartTime,EndTime ...
,2016-07-12,03:11,03:21,......

这有excel显示第一行的所有空白,并开始显示之后的行中的数据。基本上将所有数据向右移动一行。

在尝试正确解析代码时,代码中可能有一些不必要的参数和/或参数。

提前致谢。

1 个答案:

答案 0 :(得分:1)

手动将,添加到文件会导致列对齐问题,因为手动插入的,将与csv.writer作为分隔符插入的;冲突。

将分隔符从,更改为replace(";", ",")不需要额外的csv.reader。只需更改writerfor file in x: with open(str(x[file]) + '.csv', newline='') as csvFile: reader = csv.reader(csvFile, delimiter=";") data = [row for row in reader] # ^^^^^^ use reader not csvFile with open(str(x[file]) + '.csv', 'w') as csvFile: w=csv.writer(csvFile, delimiter=',', quoting=csv.QUOTE_NONE,escapechar=' ') w.writerows(data) 对象中的分隔符即可。

以下内容应该符合您的要求:

{{1}}