簡體   English   中英

Python 3 CSV writer 拆分包含逗號的行

[英]Python 3 CSV writer splitting lines which contain commas

我想為以下網址提取 csv。 有一列,其中某些值包含帶有逗號的文本,這會導致問題。 例如在最后 2 個項目下面的列中應該是單個列但正在拆分

"""SL""","""2019-09-29""","""88.6""","""-0.6986""",""""5.8034""","""喬什·菲格利""",572033,542914,"""field_out""","""hit_into_play_score""",,,,,14,"""Josh Phegley 出局","二壘手唐尼沃爾頓對一壘手奧斯汀諾拉。肖恩·墨菲得分。"""

我的代碼如下

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各種組合,但沒有運氣。 如果列出現在引號內,是否可以忽略列?

您傳入的數據已經是 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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM