我想一次读一行并将该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
答案 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)