[英]python 3.4 import csv delimiter
使用Python 3.4和Im嘗試導入csv文件,其中包含逗號,其他包含分號,其他包含選項卡作為分隔符。
是否可以讓python檢測使用哪個正確的分隔符? 我已閱讀python上的帖子:import csv file(delimiter“;”或“,”)但無法獲得相應的結果。
我的代碼到目前為止:
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']
問題似乎是您用來確定分隔符的csv文件的第一行。 如果您將行更改為:該程序按預期工作:
afsfaf@faf.com, $161.321, True, 1
我想這是因為他希望你的csv文件中每行有相同數量的屬性。
使用嗅探而不通過可能的分隔符為我工作
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.