我正在从多个 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 显示第一行的所有空白,并开始显示后面行中的数据。本质上是将所有数据向右移动一行。
在我试图正确解析代码时,代码中可能存在一些不必要的参数和/或参数。
提前致谢。
手动添加,
到文件中将导致列对齐问题,因为手动插入 ,
s 将与 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)
我是一名优秀的程序员,十分优秀!