我在拆分 csv 時遇到問題,因為某些欄位內部有一個“\n”
我正在使用:
file_data = csv_file.read().decode("utf-8")
csv_data = file_data.split("\n")
但欄位看起來像
'string 1','string 2',
'string
3'
'string 4',
我希望 csv_data[0] 為字串 1 和 2,csv_data[1] 為字串 3,csv_data[2] 為字串 4
我目前使用的方式,我正確地得到了 csv_data[0],但是字串 3 被分成兩個索引,因為它的文本中有一個 /n ......
- - - - - - - -[編輯] - - - - - - - -
我通過不使用拆分來解決它,而是通過 csv_data 迭代(下面發布的答案)
uj5u.com熱心網友回復:
您應該使用庫 csv 而不是嘗試自己決議它。
這是一個可以幫助您的鏈接
uj5u.com熱心網友回復:
使用圖書館。Python 有csv模塊 [Python-doc]來決議 csv 檔案。我強烈建議使用決議器,因為 CSV 檔案格式比看起來更復雜,例如有語法來指定引號和新行作為字串的內容。
您可以決議 csv 內容,例如生成一個串列串列:
import csv
with open('mycsv.csv') as mycsv:
csvreader = csv.reader(mycsv)
data = [tuple(row) for row in csvreader]
uj5u.com熱心網友回復:
我通過不使用拆分來解決它,而是通過 csv_data 迭代如下:
csv_file = request.FILES["csv_upload"]
if not csv_file.name.endswith('.csv'):
messages.warning(request, "O arquivo n?o é um csv!")
return HttpResponseRedirect(request.path_info)
file_data = csv_file.read().decode("utf-8")
csv_data = file_data.split("\r\n")
fields = []
fieldsTemp = []
# pegando os campos do csv
text = ''
firstQuote = False
secondQuote = False
for x in csv_data:
for char in x:
# removendo a virgulas de separa??o
if char != ',':
text = text char
# tratando strings que contém virgula
if char == '\"':
if firstQuote:
secondQuote = True
firstQuote = True
if secondQuote:
firstQuote = False
secondQuote = False
# adicionando o campo
if not firstQuote:
if char == ',':
fieldsTemp.append(text)
text = ''
fields.append(fieldsTemp)
fieldsTemp = []
事實證明,我可以用 /r/n 分割,它可以解決我特定 csv 的部分問題,但后來我不能用逗號分割,因為同樣的原因,逗號出現在字串中,所以我改用那個回圈檢查我是否在引號內,并手動創建我的欄位
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404670.html
標籤:
上一篇:如何使偽隨機BigInt生成器轉換為特定長度的字串?
下一篇:如何從字串中獲取特定文本?
