Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从CSV删除行_Python_Csv_Python 2.7_Pandas - Fatal编程技术网

使用python从CSV删除行

使用python从CSV删除行,python,csv,python-2.7,pandas,Python,Csv,Python 2.7,Pandas,我有一个包含网页链接的csv文件。我正在从每个链接收集数据,并将其保存在单独的csv文件中。 现在,如果我必须从离开的位置恢复文件,我必须手动删除csv文件中的条目,然后运行代码。 我查阅了csv模块的文档,但找不到任何用于此目的的函数。 我还浏览了Stackoverflow和其他网站上关于这方面的所有其他问题,但没有任何帮助。 有没有办法按我希望的方式删除行 这是我现在拥有的 import pandas as p df = p.read_csv("All_Links.csv") for i

我有一个包含网页链接的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

因为您已经将整个文件读入数据帧,所以可以从离开的点开始迭代。假设您在
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

这是最简单的方法。更稳健的做法是有两个文件,一个用于待处理的行,一个用于已处理的行。

如果要将未处理的其余数据写回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)

谢谢你的回答,是的,这是一种方法。但是,如果有人能回答最初的问题,例如“我如何删除行”,我会等待。这对我的应用程序来说是最好的。对于文本文件,唯一的方法是编写一个新文件,或者每次都用你想要的文件覆盖现有的文件。这个很贵。没有办法只删除一行。:-/yeah,你是对的,大约有100000行,处理在一个循环中进行,任何与循环中的文件处理相关的事情都会让它变得非常昂贵。因此,我认为@viktor的方法是我能做的最好的方法。是的,这是一个实用的解决方案,应该足够有效,并且比我的方法更完整。从文件中间删除内容的过程只能通过读取文件并写入除要跳过的行以外的所有内容来完成。您可以读入CSV的所有行,然后拼接阵列,然后将阵列写回文件,但这只是完成同样的事情,但需要更大的内存。如果您考虑使用df.drop(i,1),请参阅api文档: