【问题标题】:csv file read - every single character in one single list读取 csv 文件 - 一个列表中的每个字符
【发布时间】:2017-04-23 03:13:44
【问题描述】:

我对 python 还很陌生,可能真的需要一些帮助(我现在还没有找到任何对我有帮助的东西)。

我想将 csv 文件读取到 list,但不幸的是我的输出不符合预期。而不是像这样的列表:

[[Weiz;61744],[Deutschlandsberg;5645]]

我有一个如下所示的列表:

[['W'],['e'],['i'], etc.]

我的代码如下所示:

def readCSV(file):
    for row in open(file,"r+"):
        ftpstream = urllib.request.urlopen(row)
        csvFile = csv.reader(ftpstream.read().decode('latin-1'))
        data = [row for row in csvFile]
        for row in data:
            print(row)

谁能告诉我为什么它不起作用?我现在真的很挣扎……

【问题讨论】:

  • 请格式化代码
  • 已经完成了,对不起。
  • for row in data 正在进一步逐字符分解每一行。你能展示一下data 的一行吗?
  • 我在帖子中编辑了它:-)
  • @IamnotaRabbit 当你可以用文字添加图片时不要添加图片。您不需要写“已添加”或“编辑”或“编辑 42.3.1”或“我会在 5 分钟内回来”:p.

标签: python file csv file-read


【解决方案1】:

函数csv.reader 期望接收行列表,而不是单个字符串(例如ftpstream.read().decode('latin-1') 返回的字符串)。如果你更换:

csvFile = csv.reader(ftpstream.read().decode('latin-1'))

csvFile = csv.reader(ftpstream.read().decode('latin-1').split('\n'))

我相信它会如您所愿。

【讨论】:

  • 效果很好!非常感谢!!但我还是不太明白。我通读了一些考虑读取 csv 文件的 python 教程,但我认为我没有看到类似的东西(但也许有,但我没有得到它)​​。是什么让我的文件与众不同?
  • 您的文件没有什么不同。 csv.reader 期望在行上获得一个迭代器——如果它传递了一个文件对象或者传递了一个字符串列表(每行一个),它工作正常。如果它传递了一个字符串,那么它会尝试迭代它,但是迭代一个字符串会迭代单个字符。在这种情况下,csv.reader 的行为就好像你已经向它传递了一个每行一个字符的文件,你会得到奇怪的输出。
【解决方案2】:

根据您的文件,我认为使用 readLine() 而不是 read() 应该可以满足您的需求。例如:

csvFile = csv.reader(ftpstream.readLine().decode('latin-1'))

而不是

csvFile = csv.reader(ftpstream.read().decode('latin-1'))

【讨论】:

  • 我刚试了一下,不幸的是输出保持不变:-(
猜你喜欢
  • 2014-03-29
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2016-06-14
相关资源
最近更新 更多