【发布时间】:2021-02-04 20:34:07
【问题描述】:
我正在从网站中提取数据并将其保存为 Python 中的 CSV。大部分时间都有效,除非其中一行中的特定字段偶尔为数千并且供应商在该字段中包含逗号。无论我如何使用 writer.writerow(),我似乎都无法排除这个逗号被解释为分隔符,即使供应商在逗号出现时将特定字段括在双引号中。
# Obtain the data from the website
downloadresponse = s.post(downloadurl, data=downloaddata,headers=postheaders, cookies=loginresponse.cookies)
print("Download response status =", downloadresponse.status_code)
print("Downloading " +filename+" now.")
with open(filename, 'w') as f:
writer = csv.writer(f, delimiter =',',escapechar='\\' ,quotechar ='"', quoting=csv.QUOTE_MINIMAL, doublequote=True)
for line in downloadresponse.iter_lines():
print("Raw Line =", line)
print("UTF Line =", line.decode('utf-8'))
print("UTF & Split Line =", line.decode('utf-8').split(','))
writer.writerow(line.decode('utf-8').split(','))
为 CSV 中的有问题的行生成此输出。
Download response status = 200
Download response reason = OK
Downloading /Users/someone/Documents/@Investing/UOA-Workspace/data/uoa-eod-02-04-2021.csv now.
DEBUG-Raw Line = b'AMC,7.31,Call,2,02/05/21,1,5.25,5.33,5.4,5.3,739,283,2.61,"1,246.65%","15:10 ET"' \
DEBUG-UTF Line = AMC,7.31,Call,2,02/05/21,1,5.25,5.33,5.4,5.3,739,283,2.61,"1,246.65%","15:10 ET" \
DEBUG-UTF & Split Line = ['AMC', '7.31', 'Call', '2', '02/05/21', '1', '5.25', '5.33', '5.4', '5.3', '739', '283', '2.61', '"1', '246.65%"', '"15:10 ET"']
因此,原始 LINE 中的字段“1,246.65%”被逗号分割成两个字段“1”,“246.65%”,即使它包含在双引号中。谁能看到我做错了什么?
【问题讨论】:
-
str.split()不关心引号。你为什么认为它应该这样做? -
line相对于引号看起来格式正确。为什么不直接写入字符串之类的文件,而不使用 csv 模块? -
当提出这样的问题时,您应该提供一个其他人可以运行的minimal reproducible example(而不是试图在您的代码中“看到”问题)。
-
@PranavHosangadi - 我没有看到任何其他方法可以将字段拆分为我的 CSV 中的单独列。
-
我说“不使用 csv 模块”
标签: python csv export-to-csv