2017-09-13 178 views
-2

已更新(對不起,這是我的第一個問題)在Python中使用分隔符分隔列表

我是一名實習生,並且非常熟悉編碼。
在我的工作中,我必須從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) 
+1

你在找什麼是'.split()'方法的字符串obj – Vinny

+4

你已經給出了許多與你的核心問題無關的細節。 [編輯](https://stackoverflow.com/posts/46201295/edit)它更專注於幫助潛在的回答者。 – JETM

+1

瞭解如何創建[mcve]。 –

回答

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指定)。

+0

我編輯了我的問題以澄清疑問! –

+0

@JonesSabino更新了示例 – mfitzp

+0

非常感謝!我做到了,努力工作!用代碼塊更新了問題 –