首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的CSV模块-用newline发布

python中的CSV模块-用newline发布
EN

Stack Overflow用户
提问于 2017-05-09 03:17:43
回答 1查看 438关注 0票数 1

我有一个csv文件,其数据如下:

代码语言:javascript
复制
"field1"|"field2"|"field3"
"12ed"|"ksdk"|"sjdhs"
"1323"|"jdjsk
sjfsk"|"sk"k"sd"

我的预期产出

代码语言:javascript
复制
field1|field2|field3
12ed|ksdk|sjdhs
1323|jsjsk sjfsk|sk"k"sd

我的两个问题在第3行。其中的数据包含双引号在双引号csv文件中,它应该在最后的输出中返回。和列的值中的新行/行中断。都在第3行找到。

由于我将数据读取为"QUOTE_NONE",所以可以返回1:-1数据,但不能用空值替换新行。

代码语言:javascript
复制
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文件内容:-

代码语言:javascript
复制
"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"

错误:-

代码语言:javascript
复制
['"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

FYI -我使用2.6.6版本

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-09 04:16:41

一个选项是添加一个检查,如果行的最后一列没有以"结尾,那么就不要将其写入输出文件,而是将下一行合并到输出文件中,然后将其写入输出文件。

Merge是一个list.extend,只是第一个列表的最后一个元素和最后一个列表的第一个元素也被连接起来。

此代码应该适用于您:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43860482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档