【问题标题】:Python 3 CSV writer splitting lines which contain commasPython 3 CSV writer 拆分包含逗号的行
【发布时间】:2020-03-12 10:24:02
【问题描述】:

我想为下面的 url 提取一个 csv。有一列中的某些值包含带有逗号的文本,这会导致问题。例如,在最后 2 项下面的列中应该是一个列,但正在拆分

"""SL""",""""2019-09-29""","""88.6""","""-0.6986""","""5.8034""","" "Josh Phegley""",572033,542914,"""field_out""","""hit_into_play_score""",,,,,14,"""Josh Phegley 出局","二垒手 Donnie Walton 对一垒手奥斯汀·诺拉。肖恩·墨菲得分。"""

我的代码如下

import requests
import csv

file_name = 'test.csv'

url = 'https://baseballsavant.mlb.com/statcast_search/csv?all=true&hfPT=&hfAB=&hfBBT=&hfPR=&hfZ=&stadium=&hfBBL=&hfNewZones=&hfGT=R%7C&hfC=&hfSea=2019%7C&hfSit=&player_type=&hfOuts=&opponent=&pitcher_throws=&batter_stands=&hfSA=&game_date_gt=&game_date_lt=&team=OAK&position=&hfRO=&home_road=&hfFlag=&metric_1=&hfInn=&min_pitches=0&min_results=0&group_by=name&sort_col=pitches&player_event_sort=h_launch_speed&sort_order=desc&min_abs=0&type=details&'

req = requests.get(url)

with open(file_name, 'w') as f:
    writer = csv.writer(f, quotechar = '"')
    for line in raw_data.iter_lines():
        writer.writerow(line.decode('utf-8').split(','))

我尝试删除 split(',') ,但这只会导致每个字符用逗号分隔。我已经尝试了quotecharquotingescapechar 的各种组合,但没有运气。如果列出现在引号中,有没有办法忽略它们?

【问题讨论】:

  • 很难分辨哪些数据属于哪一行,有没有办法改进格式或什么?

标签: python csv


【解决方案1】:

您的传入数据已经 CSV;您不应该使用csv 模块来编写它(除非您出于某种原因需要更改方言,但即便如此,您也需要使用csv 模块阅读它用原来的方言,然后用新的方言写)。

只要做:

# newline='' preserves original line endings to avoid messing with existing dialect
with open(file_name, 'w', newline='') as f:
    f.writelines(line.decode('utf-8') for line in raw_data.iter_lines())

对 UTF-8 执行最小的decode,否则转储原始数据。如果您的语言环境编码仍然是 UTF-8(或者您想编写为 UTF-8 而不管语言环境),您可以通过转储原始字节进一步简化:

# newline='' not needed for binary mode, which doesn't translate line endings anyway
with open(file_name, 'wb') as f:
    f.writelines(raw_data.iter_lines())

【讨论】:

  • 哈,现在我看到这个似乎很明显。感谢您的明确答复
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 2010-10-23
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2015-03-19
  • 2020-01-03
相关资源
最近更新 更多