如果存在特定值,则删除CSV文件中的单元格

时间:2013-07-23 08:06:51

标签: python list parsing csv indexing

我有两种类型的CSV文件,我想将它们合并在一起。 要做到这一点,我想在每一行中找到某些值,如果它们在那里就删除它们。

我尝试使用 list.Index list.Remove 函数,但是当值不在特定文件中时出现错误。

例如,两行是(我剪切其余行以便更好地显示):

CSV 1950    1300    1180    48  48  400 2   PASS        0   51:31.5
CSV 3270    2500    1950    1300    1180                        48

我想找到值为“ 3270 ”和“ 2500 ”的单元格,这样两个文件就会对齐... 之后我想再删除空单元格 - 它们将对齐...

你能帮我理解这样做的方法吗?

感谢, 尼姆罗德。

2 个答案:

答案 0 :(得分:2)

很难确切地说出你希望完成的事情,但我认为这应该让你开始。

#!/usr/bin/env python

import csv    

myfile = '/path/to/untitled.csv'
newfile = '/path/to/untitled_new.csv'

reader = csv.reader(open(myfile))

remove_me = {'3270','2500'}

print('Before:')
print(open(myfile).read())

for row in reader:
    new_row = []
    for column in row:
        if column not in remove_me:
            new_row.append(column)

    csv.writer(open(newfile,'a')).writerow(new_row)

print('\n\n')
print('After:')
print(open(newfile).read())

<强>输出:

Before:
1950,1300,1180,48,48,400
3270,2500,1950,1300,1180



After:
1950,1300,1180,48,48,400 
1950,1300,1180 

确保在迭代同一个列表时没有使用list.remove,否则你可能会搞砸自己。我上面的代码使用了一种更安全的策略,即将通过if测试的值(列您希望摆脱的某个值)复制到新列表,然后编写新列表到新的.csv文件。

这或多或少是你打算做的吗?

为了摆脱空白单元格,我认为你可以将''添加到remove_me

答案 1 :(得分:1)

我建议你循环文件中的每个值,然后放一些条件删除元素,然后将值合并到一个新的输出文件中

Step1阅读文件

import sys
import csv
updatedlist = []
for val in csv.reader(open('input1.csv' , 'rb')) :
    print val

## val will be a list of each row , 
## So in this case you will have to 
## select the elements while you will be looping 
## then replace or removing the elements you want to remove
## and make a new updated list which you will then have 
## to append to a new output.csv file
## then do the same the to the other file and append to the output.csv file    


for Values  in  updatedlist :

##looping thru the values and then make a string of the values separated by commas
        f  = open('output.csv' , 'a')
        f.writelines(updatestring) ##updated list with a string of comma separated values 
        f.close()