首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >csv阅读器输出额外的空白项目

csv阅读器输出额外的空白项目
EN

Stack Overflow用户
提问于 2018-12-06 04:22:26
回答 1查看 70关注 0票数 0

我有一个输入csv,其中包含可变数量的列,我正试图将其放入一个列表中。我的测试是解析输入csv,并在csv列周围创建一个包含额外元素的列表。我希望看到的是一个只包含csv元素的列表,而且我也得到了带引号的空元素。我需要一些帮助来理解我缺少的csv阅读器的选项。

输出示例:

代码语言:javascript
复制
$ python cond.py
opening conditions file  conditions.lst
parser  0  input line:
"string1:", "string1b,string1c,"
output list elements:
['string1:']
['', '']
['']
['string1b,string1c,']
[]

parser  1  input line:
"stringa:", "stringb,stringc,"
output list elements:
['stringa:']
['', '']
['']
['stringb,stringc,']
[]

parser  2  input line:
"string3:", "string3next=abc", "string3b","string3c:", "string3d"
output list elements:
['string3:']
['', '']
['']
['string3next=abc']
['', '']
['']
['string3b']
['', '']
['string3c:']
['', '']
['']
['string3d']
[]

输入文件:

代码语言:javascript
复制
$ cat conditions.lst
"string1:", "string1b,string1c,"
"stringa:", "stringb,stringc,"
"string3:", "string3next=abc", "string3b","string3c:", "string3d"

Python cond.py文件:

代码语言:javascript
复制
$ cat cond.py

from __future__ import print_function
#from csv import reader

import re
import sys
import csv

# variables

conditionsFile = "conditions.lst"
parserConditions = []
numOfParsers = 0


print("opening conditions file ", conditionsFile)
with open(conditionsFile, "r") as cf:
  for line in cf:
    print("parser ", numOfParsers, " input line:")
    print(line.strip())

    r = csv.reader(line, quotechar='"', delimiter=',', quoting=csv.QUOTE_ALL, skipinitialspace=True)
    print("output list elements:")
    for cline in  r:
      print(cline)

    numOfParsers = numOfParsers + 1
    print("")

  print("total number of parsers: ", numOfParsers)

更新:使用@Jean-FrançoisFabre的帮助,我没有解决根本原因,但我有了一个变通办法-我把csv元素放到一个列表中,然后删除空白元素。

代码语言:javascript
复制
for cline in  r:
  conditions.extend(cline)

conditions = filter(None, conditions)
print(conditions)
EN

回答 1

Stack Overflow用户

发布于 2018-12-06 10:55:38

csv.reader接受一个类似文件的对象,而不是string...so,它奇怪地遍历一行的字符,而不是文件的行。您只需要:

代码语言:javascript
复制
from __future__ import print_function
import csv

with open('conditions.lst','rb') as cf:
    r = csv.reader(cf,skipinitialspace=True)
    for line in r:
        print(line)

输出:

代码语言:javascript
复制
['string1:', 'string1b,string1c,']
['stringa:', 'stringb,stringc,']
['string3:', 'string3next=abc', 'string3b', 'string3c:', 'string3d']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53640139

复制
相关文章

相似问题

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