Python csv字符串到数组

Dre*_*eur 166 python csv arrays string

有人知道一个简单的库或函数来解析csv编码的字符串并将其转换为数组或字典吗?

我不认为我想要内置的csv模块,因为在我看到的所有示例中都采用了文件路径,而不是字符串.

Mic*_*las 230

我会用io.StringIO:

from io import StringIO
import csv

scsv = """text,with,Polish,non-Latin,letters
1,2,3,4,5,6
a,b,c,d,e,f
g??,zó?ty,w??,idzie,w?sk?,dró?k?,
"""

f = StringIO(scsv)
reader = csv.reader(f, delimiter=',')
for row in reader:
    print('\t'.join(row))
Run Code Online (Sandbox Code Playgroud)

更新的简化版本csv:

reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
    print('\t'.join(row))
Run Code Online (Sandbox Code Playgroud)

或者你可以简单地将split()这个字符串split()用作分隔符,然后将\n每行作为值,但这样你必须知道引用,所以split()首选使用模块.

  • Python 3现在使用io.StringIO.(希望保存Python 3用户一点时间).所以导入io和io.StringIO. (28认同)
  • 如果他的csv文件包含包含逗号的字符串,则split方法将不起作用 (6认同)
  • 或引用的字符串作为值(带或不带逗号) (3认同)
  • 而不是`.split('\n')`,你可以使用`.splitlines()`. (3认同)

ada*_*amk 67

简单 - csv模块也适用于列表:

>>> a=["1,2,3","4,5,6"]  # or a = "1,2,3\n4,5,6".split('\n')
>>> import csv
>>> x = csv.reader(a)
>>> list(x)
[['1', '2', '3'], ['4', '5', '6']]
Run Code Online (Sandbox Code Playgroud)

  • 很高兴知道,但请记住,如果您的字段包含换行符,`.split('\n')`会做奇怪的事情. (4认同)
  • 如果该字段被引用,则不需要转义换行符。 (2认同)

nvd*_*nvd 10

>>> a = "1,2"
>>> a
'1,2'
>>> b = a.split(",")
>>> b
['1', '2']
Run Code Online (Sandbox Code Playgroud)

要解析CSV文件:

f = open(file.csv, "r")
lines = f.read().split("\n") # "\r\n" if needed

for line in lines:
    if line != "": # add other needed checks to skip titles
        cols = line.split(",")
        print cols
Run Code Online (Sandbox Code Playgroud)

  • -1这个解决方案的问题在于它没有考虑"字符串转义",即"3",4,5,6,6`应被视为三个字段而不是五个字段. (8认同)

sou*_*ine 9

csv.reader() https://docs.python.org/2/library/csv.html的官方文档 非常有用,它说

文件对象和列表对象都是合适的

import csv

text = """1,2,3
a,b,c
d,e,f"""

lines = text.splitlines()
reader = csv.reader(lines, delimiter=',')
for row in reader:
    print('\t'.join(row))
Run Code Online (Sandbox Code Playgroud)


ros*_*ori 8

正如其他人已经指出的那样,Python包含一个用于读取和写入CSV文件的模块.只要输入字符保持在ASCII限制范围内,它就能很好地工作.如果您想处理其他编码,则需要做更多工作.

csv模块Python文档实现了csv.reader的扩展,它使用相同的接口但可以处理其他编码并返回unicode字符串.只需复制并粘贴文档中的代码即可.之后,您可以像这样处理CSV文件:

with open("some.csv", "rb") as csvFile: 
    for row in UnicodeReader(csvFile, encoding="iso-8859-15"):
        print row
Run Code Online (Sandbox Code Playgroud)


小智 6

根据文件:

虽然模块不直接支持解析字符串,但可以轻松完成:

import csv
for row in csv.reader(['one,two,three']):
    print row
Run Code Online (Sandbox Code Playgroud)

只需将您的字符串转换为单个元素列表即可.

在文档中明确显示此示例时,导入StringIO对我来说似乎有些过分.