簡體   English   中英

(python) 如果字段中包含帶有 /n 的字符串,我如何使用 /n 拆分 csv

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM