从txt文件中读取特定用户输入

时间:2012-12-29 00:02:18

标签: python readfile

我有一个程序让用户输入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个附加行的方法。因此,我将来可以通过点击选择重做或删除事件。

事先,谢谢!

祝你好运, 卡斯帕

3 个答案:

答案 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'