从特定行开始逐个字符地读取文件

时间:2017-01-31 06:42:32

标签: python file tkinter

我正在使用tkinter打开一个对话框,用户可以在其中选择文件。我想从第11行开始解析该文件。该文件如下所示:

(115,147)
(6,145)
(44,112)
(17,72)
(112,1)
(60,142)
(47,158)
(35,43)
(34,20)
(38,33)
11101111110111011111111110111111111111111111111011111111111111110111111111
111101111101111a11011122112011222222211112111221221111101111111111110111ab
..more down here

如果没有空格分隔,我如何检索每个字符?我知道我必须这样开始:

# Bring up save dialog box
file_path = filedialog.askopenfilename(filetypes=[("Text files","*.txt")])

# Check if user clicked cancel
if file is None or file is '':
    return False

# Read from file
with open(file, 'r') as f:
    # Do something here with f.read()

我希望将这些数字放在一个列表中(每个都在它们自己的索引处):

11101111110111011111111110111111111111111111111011111111111111110111111111
111101111101111a11011122112011222222211112111221221111101111111111110111ab

任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

首先,您需要从文件中read()数据,然后按换行拆分以获取文件中的行列表:

lines=f.read().split("\n")

如果您只需要从第11行到结尾,您可以使用:

lines=lines[10:]

然后迭代它,使用list()分割成字符:

characters=[list(line)for line in lines]

输出:

[['1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1'], ['1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', 'a', '1', '1', '0', '1', '1', '1', '2', '2', '1', '1', '2', '0', '1', '1', '2', '2', '2', '2', '2', '2', '2', '1', '1', '1', '1', '2', '1', '1', '1', '2', '2', '1', '2', '2', '1', '1', '1', '1', '1', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '0', '1', '1', '1', 'a', 'b']]

答案 1 :(得分:1)

# consume 10 lines
for _ in range(10):
    f.readline()

# read one character at a time
# f.read(1) will return '' when you reach eof
c = f.read(1)
while c:
    # do something with c
    c = f.read(1)

就此而言,因为python中的列表和字符串是相同的,所以你可以说

# consume 10 lines
for _ in range(10):
    f.readline()

rest = f.read()

然后休息将是一个包含所有内容的列表/字符串...即,rest[0]是第一个字符,rest[1]是下一个,等等。请注意,您也将捕获换行符方式。