我正在从多个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.reader
和writer
对象中的分隔符就足够了。
以下应做您打算做的事情:
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)