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语句的两个分支中复制了 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())作为. 这可能不是你想要做的。相反,您需要单独的变量和:dialectReaderdialecthas_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 回答