使用python从CSV删除行

时间:2013-08-17 05:52:07

标签: python csv python-2.7 pandas

我有一个csv文件,其中包含指向网页的链接。我正在从每个链接收集数据并将其保存在单独的csv文件中 现在,如果我必须从我离开它的位置恢复文件,我必须手动删除csv文件中的条目,然后运行代码。
我查看了csv模块的文档,但找不到任何用于此目的的函数 我还在Stackoverflow和其他网站上就此进行了所有其他问题,但没有一个有用 有没有办法按照我想要的方式删除行?

这就是我现在所拥有的

import pandas as p

df = p.read_csv("All_Links.csv")

for i in df.index:
    try:
        url= df.ix[i]['MatchLink']

        #code process the data in the link

        #made sure that processing has finished
        #Now need to delete that row

2 个答案:

答案 0 :(得分:1)

由于您已经将整个文件读入数据框,因此您可以从您离开的位置开始迭代。假设你离开了i=23,你可以这样做:

import pandas as p

df = p.read_csv("All_Links.csv")

last_line_number = 23
for i in df.index[last_line_number:]:
    try:
        url= df.ix[i]['MatchLink']
        #code process the data in the link
        #made sure that processing has finished
        #Now need to delete that row

这是最简单的方法。更强大的是拥有2个文件,一个用于处理行,一个用于处理行。

答案 1 :(得分:1)

如果要将未处理的其余数据写回csv文件,即只删除处理的数据,只需将算法修改为:

import pandas as p

df = p.read_csv("All_Links.csv")

for i in df.index:
    try:
        url= df.ix[i]['MatchLink']
        #code process the data in the link
        #made sure that processing has finished
        df.iloc[i:].to_csv('All_links.csv', index=False)

但这会在每次迭代时编写你的文件,也许最好记住i的值,并在完成所有迭代后再执行:

import pandas as p

df = p.read_csv("All_Links.csv")

i = 0
for i in df.index:
    try:
        url= df.ix[i]['MatchLink']
        #code process the data in the link
        #made sure that processing has finished
    except:
        # something broke, this row isn't processed decrease i
        i -= 1
        break

# Now write the rest of unprocessed lines to a csv file
df.iloc[i:].to_csv('All_links.csv', index=False)