我有两个CSV文件列表,我的程序正在将它们组合成一个文件。
第一组文件有5列数据,我不想包含在输出中。如何从我使用csv.reader
读取的数据中删除这5列,无论是逐行还是全部删除?
这是我的函数(我希望保持函数def
和结构大致相同):
def get_data(filename,rowlen,delimit=','):
data = []
with open(filename, 'rb') as f:
raw = csv.reader(f, dialect='excel', delimiter=delimit)
if raw != None:
for row in raw:
if row[-1] == '':
row.pop()
for i in range(len(row),rowlen):
row.append('-999')
data.append(row)
return data
我试过这样做:
raw = csv.reader(f, dialect='excel', delimiter=delimit)
if raw != None:
for row in raw:
if rowlen == 13: # This is true only for csv files I want to shorten
row = row[0:8]
rowlen = 8
if row[-1] == '':
但输出文件保持不变。另外,我尝试评论rowlen = 8
,但这只填充了-999
我不想要的列。
答案 0 :(得分:0)
您需要替换raw中的行或创建一个包含切片行的新列表,这里使用枚举来修正代码的一部分,以跟踪要在raw中替换的行的索引。 / p>
for i, row in enumerate(raw):
if rowlen == 13: # This is true only for csv files I want to shorten
raw[i] = row[0:8]
rowlen = 8
另一个不改变原始的例子:
new_container = []
for row in raw:
if rowlen == 13: # This is true only for csv files I want to shorten
new_container.append(row[0:8]) # we just append your slice to the new_container each iteration
rowlen = 8
答案 1 :(得分:0)
你应该看看pandas。它使csv更好地工作..
from pandas import read_csv
def get_data(filename, rowlen, delimit=','):
df = read_csv(filename, header=None, sep=delimit, usecols=range(rowlen))
df.to_csv('output.csv', index=False)
get_data('input.csv',4)