0

我想做的基本上是我有这个文件,其中的数据在不同的行中,除了最后一段是传记,可能跨越多行。传记可能有任意多行,我只知道它从第 5 行开始。现在我需要的是一种从第五行到文件末尾检索传记的方法,但我不知道该怎么做。提前致谢。

这是我尝试过的:

from tkinter import *
import os

class App:

    charprefix = "character_"
    charsuffix = ".iacharacter"
    chardir = "data/characters/"


    def __init__(self, master):
        self.master = master
        frame = Frame(master)
        frame.pack()

        # character box
        Label(frame, text = "Characters Editor").grid(row = 0, column = 0, rowspan = 1, columnspan = 2)
        self.charbox = Listbox(frame)
        for chars in []:
            self.charbox.insert(END, chars)
        self.charbox.grid(row = 1, column = 0, rowspan = 5)
        charadd = Button(frame, text = "   Add   ", command = self.addchar).grid(row = 1, column = 1)
        charremove = Button(frame, text = "Remove", command = self.removechar).grid(row = 2, column = 1)
        charedit = Button(frame, text = "    Edit    ", command = self.editchar).grid(row = 3, column = 1)

        for index in self.charbox.curselection():
            charfilelocale = self.charbox.get(int(index))
            charfile = open(app.chardir + app.charprefix + app.charfilelocale, 'r+')
            charinfo = str.splitlines(0)
4

3 回答 3

1

如果您只想将整个传记放在一个字符串中,您可以这样做:

with open('biography.txt') as f:
    for i in range(4): # Read the first four lines
        f.readline()
    s = ''
    for line in f:
        s += line

" for line in f" 迭代fiter(f)返回一个生成器函数,f.readline()直到到达文件末尾。

于 2013-08-14T04:31:53.773 回答
1

表达您的问题的另一种方式是“我如何丢弃我阅读的文件的前四行?” 一步一步地回答这个问题:

filename = "/a/text/file"
input_file = open(filename)

默认模式为open()'r'因此您不必指定它。

contents = input_file.readlines()
input_file.close()

wherereadlines()在一次 gulp 中返回输入文件中包含的所有行的列表。无论如何,您将不得不阅读所有内容,因此让我们通过一个方法调用来完成。而且,当然close()因为你是一个整洁的编码员。现在您可以使用列表切片来获取您想要的部分:

biography = contents[4:]

它实际上并没有丢弃前四行,它只是将除前四行之外的所有内容都分配给了传记。为了使这更惯用,给出:

with open(filename) as input_file:
    biography = input_file.readlines()[4:]

了解上下文管理器with很有用,但当您准备好时请查看它。在这里它救了你,close()但它比这更强大一点。

添加以回应评论

就像是

with open(filename) as input_file:
    contents = input_file.readlines()
person = contents[0]
birth_year = contents[1]
...
biography = contents[4:]

但我想你在我打字的时候就明白了这一点。

于 2013-08-14T05:02:09.317 回答
0

f = open('工作文件', 'w')

对于 f 中的行:打印行,

This is the first line of the file.
Second line of the file

Python 不需要您事先知道文件有多大或它包含多少行。它使用迭代器并从文件中获取行并延迟返回行。在这里找到一些优秀的文档:http: //docs.python.org/2/tutorial/inputoutput.html

于 2013-08-14T04:32:13.007 回答