1

我有一个程序让用户输入 som 数据,然后将这些数据绘制在画布上(如每周计划)。我现在希望用户能够删除或重做一个条目(我将通过点击事件来完成),但是,我的问题是:

如何读取文本文件中的特定行?可能的文本文件示例:

Abe
#0080c0 
February
Friday 
21 
Part delivery 

John 
#ff8000 
July 
Sunday 
21 
Social 

Egon 
#ff80ff 
April 
Thursday 
15 
Work 

请注意,这是文本文件的一小部分,理想情况下它将包含 56 个这些 6 行集群。

我插入文本的代码:

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 时读取 fx 6 附加行的一种方式。因此,我将来可以通过单击选择重做或删除事件。

提前,谢谢!

最好的问候,卡斯帕

4

3 回答 3

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)
于 2012-12-29T00:21:07.187 回答
0

首先,我不是这方面的佼佼者,但如果您扫描整个文档并将其存储到字符串的 ArrayList 中,您就可以删除某些行、添加行和修改行。

之后,您可以删除文档的信息并重新粘贴 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;
}

这将创建一个可搜索的单词数组,然后您可以根据需要删除和添加它,然后清除您的文档并从数组列表中重新粘贴新信息。

于 2012-12-29T00:14:27.610 回答
0

您可以使用 readlines 创建列表,其中每个条目都是 txt 文件的单独行。然后您可以更改此列表中的特定条目并使用 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'
于 2012-12-29T00:23:35.333 回答