Python csv 字符串转为数组
- 2025-02-24 09:30:00
- admin 原创
- 19
问题描述:
有人知道一个简单的库或函数来解析 csv 编码字符串并将其转换为数组或字典吗?
我不认为我想要内置的csv 模块,因为在我见过的所有示例中,它都采用文件路径,而不是字符串。
解决方案 1:
您可以使用将字符串转换为文件对象io.StringIO
,然后将其传递给csv
模块:
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(' '.join(row))
split()
带有换行符的更简单版本:
reader = csv.reader(scsv.split('
'), delimiter=',')
for row in reader:
print(' '.join(row))
或者您可以简单地split()
将此字符串分成几行,用作`分隔符,然后
split()将每行分成几值,但这样您必须注意引用,因此
csv`最好使用模块。
在Python 2上,你必须导入StringIO
为
from StringIO import StringIO
反而。
解决方案 2:
简单——csv 模块也适用于列表:
>>> a=["1,2,3","4,5,6"] # or a = "1,2,3
4,5,6".split('
')
>>> import csv
>>> x = csv.reader(a)
>>> list(x)
[['1', '2', '3'], ['4', '5', '6']]
解决方案 3:
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(' '.join(row))
解决方案 4:
根据文档:
虽然该模块不直接支持解析字符串,但可以轻松完成:
import csv
for row in csv.reader(['one,two,three']):
print row
只需将您的字符串变成单个元素列表。
当此示例明确地出现在文档中时,导入 StringIO 对我来说似乎有点过分。
解决方案 5:
正如其他人已经指出的那样,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
解决方案 6:
不是通用的 CSV 解析器,但可用于带有逗号的简单字符串。
>>> a = "1,2"
>>> a
'1,2'
>>> b = a.split(",")
>>> b
['1', '2']
要解析 CSV 文件:
f = open(file.csv, "r")
lines = f.read().split("
") # "
" if needed
for line in lines:
if line != "": # add other needed checks to skip titles
cols = line.split(",")
print cols
解决方案 7:
https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader
csvfile 可以是任何支持迭代器协议的对象,每次调用其 next() 方法时都会返回一个字符串
因此,一个StringIO.StringIO()
,str.splitlines()
甚至一个生成器都是很好的。
解决方案 8:
使用它将 csv 加载到列表中
import csv
csvfile = open(myfile, 'r')
reader = csv.reader(csvfile, delimiter=' ')
my_list = list(reader)
print my_list
>>>[['1st_line', '0'],
['2nd_line', '0']]
解决方案 9:
这是一个替代解决方案:
>>> import pyexcel as pe
>>> text="""1,2,3
... a,b,c
... d,e,f"""
>>> s = pe.load_from_memory('csv', text)
>>> s
Sheet Name: csv
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| a | b | c |
+---+---+---+
| d | e | f |
+---+---+---+
>>> s.to_array()
[[u'1', u'2', u'3'], [u'a', u'b', u'c'], [u'd', u'e', u'f']]
这是文档
解决方案 10:
str
对于仍然在寻找将标准 CSV 转换为list[str]
以及反向转换的可靠方法的人,这里有我从这个和其他 SO 线程中的一些答案中整理出的两个函数:
def to_line(row: list[str]) -> str:
with StringIO() as line:
csv.writer(line).writerow(row)
return line.getvalue().strip()
def from_line(line: str) -> list[str]:
return next(csv.reader([line]))
解决方案 11:
对于 csv 文件:
data = blob.download_as_text()
`pd.DataFrame(i.split(",") for i in data.split("
"))`
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)