0

私はデータ値をリストにプルするcsvリーダーを持っています。このデータがリストに入れられたら、リストの空白を取り除きたいと思います。私はオンラインで見て、人々が使用しているのを見ましたstriplist()

例えば

def striplist(l):
    return([x.strip() for x in l])

ただし、初心者であり、コードを組み込むことを試みているので、私はあまり運がなく、問題に関するガイダンス、または私が間違っていることについての理解をいただければ幸いです。私のコードは以下の通りです:

import csv

import time

csvfile = open("example.csv")

filetype = csv.Sniffer().has_header(csvfile.read(1024))

csvfile.seek(0)

reader = csv.reader(csvfile,filetype)

csvreaderlist = []

csvfilecounter = 0


if filetype:
    next(reader)
    print("CSV file located, headers present, importing data")
    time.sleep(3)
    for data in reader:
            csvreaderlist.append(data)
            print(data)
            csvfilecounter = csvfilecounter +1
            summarycounter = summarycounter +1

else:
    print("CSV file located, no headers found, importing data")
    time.sleep(3)
    for data in reader:
            csvreaderlist.append(data)
            csvfilecounter = csvfilecounter +1
            summarycounter = summarycounter +1
            print(data)

if csvfilecounter == csvfilecounter:
    print(len(csvreaderlist),'Lines were successfully imported from the CSV file')
    time.sleep(3)
def striplist(csvreaderlist):
    return([data.strip() for data in csvreaderlist])
4

2 に答える 2

0

あなたの機能の例:

def strip_list(the_list):
    return [line.strip() for line in the_list]

lines = ['foo\n', 'bar\r\n', 'baz']
stripped_list = strip_list(lines)
print(stripped_list)

出力します:

['foo', 'bar', 'baz']

そして、ここでは醜いメモリ非効率的なワンライナーとして、使用して示すだけですsplitlines():)

return ''.join(csvreaderlist).splitlines()
于 2012-09-18T22:40:05.907 に答える
0

私が質問を正しく理解していれば、strip_listインポートしているCSVデータがすべて削除された文字列になるように、関数をどこに適用する必要があるかを尋ねています。重要な場所は、CSV リーダーから取得した「データ」リストがある場所です。strip_listこれは常に文字列のリストになるため、結果配列に追加する前に関数に渡すことができます。

ところで、現在、ifステートメントの 2 つのブランチで CSV 読み取りループのコア部分を複製しています。それは不要です。重複なしでそれを行う方法は次のとおりです。

if filetype:
    next(reader)
    print("CSV file located, headers present, importing data")
else:
    print("CSV file located, no headers found, importing data")

time.sleep(3)

for data in reader:
        csvreaderlist.append(strip_list(data)) # do stripping here!
        csvfilecounter = csvfilecounter +1
        summarycounter = summarycounter +1

strip_listモジュール レベルで (関数の一部としてではなく) 実行する場合は、このコードの上のどこかに の定義を移動する必要があることに注意してください。

ところで、あなたは現在Trueor False(の戻り値csv.Sniffer().has_header())dialectを your のパラメータとして渡していますReader。それはおそらくあなたがやりたいことではありません。dialect代わりに、とには別の変数が必要ですhas_header

csvfile = open("example.csv")
top = csvfile.read(1024)
csvfile.seek(0)

sniffer = csv.Sniffer()

dialect = sniffer.sniff(top)
has_header = sniffer.had_header(top)

reader = csv.reader(csvfile, dialect)
if has_header:
    next(reader)
于 2012-09-19T08:23:14.843 に答える