【问题标题】:python 3.4 import csv delimiterpython 3.4导入csv分隔符
【发布时间】:2015-12-06 14:07:59
【问题描述】:

使用 Python 3.4 并尝试导入 csv 文件,其中一些包含逗号,另一些包含分号,其他包含制表符作为分隔符。

是否可以让 python 检测使用哪个合适的分隔符? 我已阅读python: import csv file (delimiter “;” or “,”) 上的帖子,但无法获得适当的结果。

到目前为止我的代码:

import csv

class Data(object):
def __init__(self, csv_file):
    self.raw_data = []
    self.read(csv_file)

def read(self, csv_file):
        with open(csv_file, newline='') as csvfile:
            dialect = csv.Sniffer().sniff(csvfile.read(), delimiters=',;')
            csvfile.seek(0)
            f = csv.reader(csvfile, dialect)
            for row in f:
               self.raw_data.append(row)
            print(self.raw_data)

mycsv = Data('comma_separate.csv')

comma_separate.csv 包含:

afsfaf@faf.com, $161,321, True, 1
asafasf@fafa.net, $95.00, False, 3
adaafa3@aca.com, $952025, False, 3

现在我的输出是:

['afsfaf@faf.com, $161,321, True, 1'], ['asafasf@fafa.net, $95.00, False, 3'], ['adaafa3@aca.com, $952025, False, 3']

我想要的输出是:

['afsfaf@faf.com', '$161,321', 'True', '1'], ['asafasf@fafa.net', '$95.00', 'False', '3'], ['adaafa3@aca.com', '$952025', 'False', '3']

【问题讨论】:

标签: python csv import python-3.4 delimiter


【解决方案1】:

问题似乎是您用来确定分隔符的 csv 文件的第一行。如果将行更改为:

afsfaf@faf.com, $161.321, True, 1

我猜这是因为他希望在您的 csv 文件中每行拥有相同数量的属性。

【讨论】:

    【解决方案2】:

    使用嗅探而不传递可能的分隔符对我有用

    import csv
    
    class Data(object):
        def __init__(self, csv_file):
            self.raw_data = []
            self.read(csv_file)
    
        def read(self, csv_file):
                with open(csv_file, newline='') as csvfile:
                    dialect = csv.Sniffer().sniff(csvfile.read())
                    csvfile.seek(0)
                    f = csv.reader(csvfile, dialect)
                    for row in f:
                       self.raw_data.append(row)
    
                    print(csvfile.name)
                    print(self.raw_data)
    
    
    for f in ['tab_separate.tsv','comma_separate.csv','comma_separate2.csv']:
        mycsv = Data(f)
    

    输出

    tab_separate.tsv
    [['afsfaf@faf.com', '$161,321', 'True', '1'], ['asafasf@fafa.net', '$95.00', 'False', '3'], ['adaafa3@aca.com', '$952025', 'False', '3']]
    comma_separate.csv
    [['afsfaf@faf.com,', '$161,321,', 'True,', '1'], ['asafasf@fafa.net,', '$95.00,', 'False,', '3'], ['adaafa3@aca.com,', '$952025,', 'False,', '3']]
    comma_separate2.csv
    [['afsfaf@faf.com', '$161,321', 'True', '1'], ['asafasf@fafa.ne', '$95.00', 'False', '3'], ['adaafa3@aca.com', '$952025', 'False', '3']]
    

    逗号输入

    afsfaf@faf.com, $161,321, True, 1
    asafasf@fafa.net, $95.00, False, 3
    adaafa3@aca.com, $952025, False, 3
    

    标签输入

    afsfaf@faf.com  $161,321    True    1
    asafasf@fafa.net    $95.00  False   3
    adaafa3@aca.com $952025 False   3
    

    分号输入

    afsfaf@faf.com;$161,321;True;1
    asafasf@fafa.ne;$95.00;False;3
    adaafa3@aca.com;$952025;False;3
    

    【讨论】:

    • 这很奇怪。我什至复制了你的代码以及 comma_separate.csv 文件,它仍然给了我这个输出: comma_separate.csv [['afsfaf@faf.com, $161,321, True, 1'], ['asafasf@fafa.net, $95.00 , False, 3'], ['adaafa3@aca.com, $952025, False, 3']]' 你也在使用 Python 3.4 吗?
    • 是的 3.4。再看一遍,我认为我的是在逗号分隔文件中的空间而不是逗号上分割。即它认为它是一个空格分隔的文件。你能把 csv 输入上传到某个地方吗?
    • 已解决问题。是 MS Excel 格式错误。使用 Libreoffice 制作 csv 文件,它们现在可以工作了。去图..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2021-11-19
    • 2014-08-31
    • 2022-10-07
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多