更新(对不起,这是我的第一个问题)
我是一名实习生,对编码非常陌生
在我的工作中,我必须从Azure存储中读取文件,然后将此数据插入数据库中
为此,我使用get_file_to_text().content
并将其值存储在变量file
中,如下所示:
file = file_service.get_file_to_text('teste','','Retorno.csv').content
然后,我正在使用.splitlines()
这样:
formFile.append(file.splitlines())
我期待这样的结果(我的文件的每一行都是子列表):
[['2017-08-01', 'Zabbix server Sura', 'system.cpu.load[percpu,avg5]', '0.2900', '0.05217361111111111111', '0.1'], ['2017-08-01', 'Zabbix server Sura', 'system.cpu.util[,iowait]' ... ]
但是我已经得到了这个(里面有所有行的一个大的子列表):
[['2017-08-01;Zabbix server Sura;system.cpu.load[percpu,avg5];0.2900;0.05217361111111111111;0.1', '2017-08-01;Zabbix server Sura;system.cpu.util[,iowait]; ... ']]
我还尝试过.split(';')
:
file2 = file.split(';')
但它只返回一个包含值的列表:
['2017-08-01', 'Zabbix server Sura', 'system.cpu.load[percpu,avg5]', '0.2900', '0.05217361111111111111', '0.1\n2017-08-01', 'Zabbix server Sura', 'system.cpu.util[,iowait]', ...]
我能做些什么来达到我期望的结果?
谢谢!
更新(决议):
我这样做了它工作得很好。
data = []
azurestorage_text = file_service.get_file_to_text('teste', '',
'Retorno.csv').content
with StringIO(azurestorage_text) as file_obj:
reader = csv.reader(file_obj, delimiter=';')
header = next(reader)
for line in reader:
data.append(line)
答案 0 :(得分:1)
.splitlines()
将拆分文本输入中的行,返回整行列表。为了将其解析为字段(分号之间的位),您需要.split(';')
每一行,例如
lines = text.splitlines()
rows = []
for line in lines:
row.append(line.split(';'))
但是,如果要分割这样的分号分隔文本,则应使用csv.reader
来解析数据。它在处理CSV格式时更加强大,包括例如“引用文本”。如果数据中的任何字段中包含分号,则拆分分号将会中断,例如“引号中的分号;文字”。
csv.reader
需要一个类似文件的对象来操作,而不是字符串。要传入字符串,您可以使用StringIO
为其创建类似文件的界面:
对于Python2:
from StringIO import cStringIO as StringIO
import csv
text = file_service.get_file_to_text('teste','','Retorno.csv').content
file_obj = StringIO(text)
reader = csv.reader(file_obj, delimiter=';')
for row in reader:
print(row)
对于Python3:
from io import StringIO
import csv
file_obj = StringIO(text)
text = file_service.get_file_to_text('teste','','Retorno.csv').content
file_obj = StringIO(text)
reader = csv.reader(file_obj, delimiter=';')
for row in reader:
print(row)
每个row
都会包含您文件中的一行,并分成分号上的字段(由delimiter
指定)。