从文本文件中读取行,并在每次运行脚本时删除它们

时间:2014-04-05 17:15:38

标签: python

我想一次读一行并将该String分配给我的Python脚本中的变量。分配此值后,我想从txt文件中删除该行。刚才我有下一个代码:

import os

# Open file with a bunch of keywords
inputkeywordsfile = open(os.path.join(os.path.dirname(__file__),'KeywordDatabase.txt'),'r')

# Assigning
keyword = inputkeywordsfile.readline().strip()

例如,如果.txt文件具有以下结构:

dog
cat
horse

我第一次运行脚本时,会将dog分配给关键字。 第二次运行我的脚本时,cat将被分配给关键字,dog将从文本文件中删除。

解决:

readkeywordsfile = open(os.path.join(os.path.dirname(__file__),'KeywordDatabase.txt'),'r')
firstline = readkeywordsfile.readline().strip()
lines = readkeywordsfile.readlines()
readkeywordsfile.close()

del lines[0:1]

writekeywordsfile = open(os.path.join(os.path.dirname(__file__),'KeywordDatabase.txt'),'w')
writekeywordsfile.writelines(lines)
writekeywordsfile.close()

keyword = firstline

2 个答案:

答案 0 :(得分:0)

也许可能有更好的解决方案。根据我对你的问题的理解,这对我有用。在执行期间,每个行都被分配给变量keyword。这就是我用print keyword来阐述这个事实的原因。此外,仅用于演示我使用time.sleep(5)。在5秒的暂停期间,您可以检查您的txt文件,它将包含您希望的数据(当第二行被分配给变量时,第一行将从txt文件中删除)。

<强>代码

import os
import time

f = open("KeywordDatabase.txt","r")
lines = f.readlines()
f.close()
k = 0
for line in lines:
    if k == 0:
        keyword = line #Assignment takes place here
        print keyword
        f = open("KeywordDatabase.txt","w")
        for w in lines[k:]:
            f.write(w)
        k += 1
        f.close()
    else:
        keyword = line #Assignment takes place here
        print keyword
        f = open("KeywordDatabase.txt","w")
        for w in lines[k:]:
            f.write(w)
        f.close()
        k += 1
    time.sleep(5) #Time to check the txt file :)

答案 1 :(得分:0)

试试这个,让我知道你是怎么过的。需要注意的是,在处理文件对象时,Pythonic方法是使用with open语法,因为这样可以确保在离开缩进代码块后文件被关闭。 :)

import os

# Open file with a bunch of keywords
with open(os.path.join(os.path.dirname(__file__),'KeywordDatabase.txt'),'r') as inputkeywordsfile:

    # Read all lines into a list and retain the first one
    keywords = inputkeywordsfile.readlines()
    keyword = keywords[0].strip()

with open(os.path.join(os.path.dirname(__file__),'KeywordDatabase.txt'),'w') as outputkeywordsfile:
    for w in keywords[1:]:
        outputkeywordsfile.write(w)