python 3.4导入csv分隔符

python 3.4导入csv分隔符,python,csv,import,python-3.4,delimiter,Python,Csv,Import,Python 3.4,Delimiter,使用Python3.4和Im尝试导入csv文件,其中一些文件包含逗号,其他文件包含分号,其他文件包含制表符作为分隔符 是否可以让python检测使用哪个合适的分隔符? 我已经在上读了这篇文章,但没有得到适当的结果 到目前为止,我的代码是: import csv class Data(object): def __init__(self, csv_file): self.raw_data = [] self.read(csv_file) def read(self, csv_f

使用Python3.4和Im尝试导入csv文件,其中一些文件包含逗号,其他文件包含分号,其他文件包含制表符作为分隔符

是否可以让python检测使用哪个合适的分隔符? 我已经在上读了这篇文章,但没有得到适当的结果

到目前为止,我的代码是:

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')
逗号_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']
我期望的输出是:

['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']

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

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

我想原因是他希望在csv文件中每行具有相同数量的属性。

使用sniff而不传递可能的分隔符对我来说很有用

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

这也许对你有帮助。真奇怪。我甚至复制了你的代码以及逗号_separate.csv文件,它仍然给我这个输出:逗号_separate.csv[]afsfaf@faf.com,$161321,对,1'],['asafasf@fafa.net,$95.00,假,3'],['adaafa3@aca.com,$952025,False,3']]'您也在使用Python 3.4吗?是的,3.4。再看一遍,我认为我的文件是在逗号分隔文件中的空格上拆分的,而不是在逗号上拆分的。它认为这是一个以空格分隔的文件。你能把csv输入上传到什么地方吗?我们已经解决了这个问题。MS Excel出现格式错误。使用Libreoffice制作csv文件,现在可以使用了。想想看吧