我有一个程序让用户输入som数据然后在画布上绘制(如每周方案)。 我现在希望用户能够删除或重做一个条目(我将通过点击事件来完成),但是,我的问题是:
如何读取文本文件中的特定行?可能的文本文件示例:
Abe
#0080c0
February
Friday
21
Part delivery
John
#ff8000
July
Sunday
21
Social
Egon
#ff80ff
April
Thursday
15
Work
请注意,这只是文本文件的一小部分,理想情况下它将包含56个theher 6-lines-clusters。
我的插入文字的代码:
taskentry = str(tasknameentry.get())
monthentry = str(monthvar.get())
dayentry = str(dayvar.get())
dateentry = str(datevar.get())
activityentry = str(typevar.get())
tasklist = [taskentry, hexstr, monthentry, dayentry, dateentry, activityentry]
taskfile = open('taskfile.txt', 'a')
for word in tasklist:
taskfile.write('%s \n' % word)
taskfile.write('\n')
taskfile.close()
因此,对于用户能够重做或删除“任务”,我需要阅读文件并查找特定的任务名称或类似的东西,我只是不知道如何。我已经阅读了本书的.write和.read部分,查看了这里的文档和问题,但未能提供有效的解决方案。
我现在需要什么,所以我可以继续前进只是一种在搜索fx John时读取6个附加行的方法。因此,我将来可以通过点击选择重做或删除事件。
事先,谢谢!
祝你好运, 卡斯帕
答案 0 :(得分:1)
如果文件不是那么大,您可以将文件读入缓冲区,修改该缓冲区并将缓冲区写回文件。一个快速的代码片段就像:
#open the file
f = open('file.txt')
lines = f.readlines()
lineNum = -1
#find the line to modify
for i, line in enumerate(lines):
if line.strip() == "John":
lineNum = i
break
if lineNum == -1:
#Line not found, handle the error..
#modify the buffer with the new data
newtasklist = [taskentry, hexstr, monthentry, dayentry, dateentry, activityentry]
for task in newtasklist:
lines[lineNum] = task
lineNum += 1
#or if you want to remove the task list :
lines = lines[:lineNum] + [lineNum + 7:]
# and write everything back
with open('file.txt', 'w') as file:
file.writelines(lines)
答案 1 :(得分:0)
首先,我不是最好的,但是如果你扫描整个文档并将其存储到字符串的ArrayList中,那么你就可以删除某些行,添加行和修改行。 / p>
执行此操作后,您可以删除文档的信息并重新编写ArrayList中的内容。
至于阅读特定的一行,我实际上并不认为有办法使用Scanner或FileWriter读取该行。
很抱歉,如果这对你没有帮助。我正尽力以任何方式提供帮助!
一些示例代码可能是:
ArrayList<String> taskList = new <String>ArrayList;
File file = new File(<File Name>);
try
{
Scanner scan = new Scanner(file);
while(scan.hasNext())
{
taskList.add(scan.next());
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
return;
}
这将创建一个可搜索的单词数组,然后您可以根据需要删除和添加,然后清除文档并重新粘贴数组列表中的新信息。
答案 2 :(得分:0)
您可以使用readlines创建每个条目都是txt文件的单独行的列表。 然后,您可以更改此列表中的特定enries并使用writelines更改txt文件。
Tasks=open('taskfile.txt', 'r').readlines()
在数据中,您按名称拥有每个人的任务:
Data={}
n=0
try:
while True:
Data[Tasks[n+n*6]]=Tasks[n+1:n+6]
n+=1
except:
pass
然后你可以通过以下方式改变John的第二个任务:
Data['John'][1]='Football'