[英](python) How do i split a csv with /n if the fields have strings with /n inside
我在拆分 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 迭代(答案發布在下面)
您應該使用庫 csv 而不是嘗試自己解析它。
這里有一個鏈接可以幫助你
使用庫。 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]
我通過不使用拆分來解決它,而是通過 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 的部分問題,但后來由於同樣的原因,我不能用逗號分割,逗號出現在字符串中,所以我改用那個循環檢查我是否在引號內,並手動創建我的字段
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.