簡體   English   中英

python中的CSV模塊 - 換行問題

[英]CSV module in python - issue with newline

我有一個csv文件,其數據為:

"field1"|"field2"|"field3"
"12ed"|"ksdk"|"sjdhs"
"1323"|"jdjsk
sjfsk"|"sk"k"sd"

我的預期產量

field1|field2|field3
12ed|ksdk|sjdhs
1323|jsjsk sjfsk|sk"k"sd

我的兩個問題在第3行。其中數據在雙引號csv文件中包含雙引號,它應該在最終輸出中返回。 並且新行/行會中斷列的值。 全部見於第3行。

由於我將數據讀作“QUOTE_NONE”,我能夠返回[1:-1]數據,但無法用空值替換新行。

with open(fileIn, "rb") as input:
    with open(fileOut,'wb') as output:
        w = csv.writer(output, delimiter='|',quoting=csv.QUOTE_NONE,quotechar='')
        for record in csv.reader(input, delimiter='|',quoting=csv.QUOTE_NONE):
            #r = map(lambda x: x.replace("\n",""), record) --> This is not working
            print([s[1:-1] for s in record])
            w.writerow([s[1:-1] for s in record])

使用此代碼,我能夠處理引號(第一個和最后一個)並在數據中保留引號。 但是我無法處理新行。

更新 -

csv文件內容: -

"id"|"comments"|"Date"
"B-7"|"Hi How . 


Are You."|"2017-03-15 13:53:23.727"
"8-C"|"How was "your day" today"|"2017-02-06 11:45:26.783"

錯誤 :-

['"id"', '"comments"', '"Date"']
['"B-7"', '"Hi How . ']
[]
Traceback (most recent call last):
File "try.py", line 23, in <module>
appendRecords(record, oldRecord)
File "try.py", line 8, in appendRecords
oldRecord[-1] = oldRecord[-1] + ' ' + record[0]
IndexError: list index out of range

僅供參考 - 我正在使用2.6.6版

一種選擇是添加一個檢查,如果一行的最后一列沒有以"然后不將其寫入輸出文件而是將下一行合並到它,然后將其寫入輸出文件”。

Merge是一個list.extend除了第一個列表的最后一個元素和最后一個列表的第一個元素也被連接起來。

此代碼應該適合您:

def appendRecords(record, oldRecord):
    # Check to guard against empty lines in the input csv file
    if len(record):
        oldRecord[-1] = oldRecord[-1] + ' ' + record[0]
        record.pop(0)
        oldRecord.extend(record)



with open(fileIn, "rb") as input:
    with open(fileOut,'wb') as output:
        w = csv.writer(output, delimiter='|',quoting=csv.QUOTE_NONE,quotechar='')
        oldRecord = None
        for record in csv.reader(input, delimiter='|',quoting=csv.QUOTE_NONE):
            if oldRecord is not None:
                appendRecords(record, oldRecord)
                record = oldRecord

            if record[-1].endswith('"'):
                print([s[1:-1] for s in record])
                w.writerow([s[1:-1] for s in record])
                oldRecord = None
            else:
                oldRecord = record

暫無
暫無

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

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