简体   繁体   中英

delete rows on a csv file depending on pattern python

我是使用 python 处理 csv 文件的新手,我想编写允许我执行以下操作的代码:我有一个模式: pattern="3-5;7;10-16" (可能会有所不同),我想要删除(在那种情况下)第 3 到 5、7 和 10 到 16 行有没有人知道怎么做?

You cannot simply delete lines from a csv. Instead, you have to read it in and then write it back with the accepted values. The following code works:

import csv

pattern="3-5;7;10-16"

off = []
for i in pattern.split(';'):
    if '-' in i:
        off += range(int(i.split('-')[0]),int(i.split('-')[1])+1)
    else:
        off += [int(i)]

with open('test.txt') as f:
    reader = csv.reader(f)
    reader = [','.join(item) for i,item in enumerate(reader) if i+1 not in off]

print reader

with open('input.txt', 'w') as f2:
    for i in reader:
        f2.write(i+'\n')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM