我正在从多个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])


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



日期,开始时间,结束时间...
,2016-07-12,03:11,03:21,...

这将使excel在第一行显示所有空白,并在第二行开始显示数据。本质上,将所有数据向右移动一行。

我试图使其正确解析的代码中可能有一些不必要的参数和/或参数。

提前致谢。

最佳答案

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

将分隔符从;更改为,不需要额外的replace(";", ",")。更改csv.readerwriter对象中的分隔符就足够了。

以下应做您打算做的事情:

for 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)

10-06 15:40
查看更多