从.txt中提取数据

时间:2016-04-15 20:13:57

标签: python python-3.x

我在python中做一个数独游戏,我有一点问题就是知道我应该如何从文件中获取数据

所以我有一个看起来像这样的文件:

.3. ... ...
..8 39. 6.. 
5.1 2.. 49.
.7. 6.. ...
2.. ... .4.
... 5.3 98.
... ... 15.
... ..7 ..9
4.. .1. 3..

每9个点就是" \ n"

我如何获取数据?

目前,我刚刚那样做了:

import os

f = open('sudo.txt', 'r')
lines = f.read()
f.close()

sudoku = lines

print(sudoku)
os.system("pause")

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这实际上比其他答案似乎要考虑的要困难得多。特别是解决数独(这不在本问题的范围内)

考虑您想要的数据结构类型。我想你想要在自定义类

中重新定位list
class Puzzle(list):
    pass

然后传递一个从左到右从上到下的每个数字的列表,可能使用零(0)作为空格,这意味着你的构造函数应该是

Puzzle([0,3,0,0,0,0,0,0,0,0,0,8,3,9,0,6,0,0, ... ])

您如何从目标数据中读取此信息?嗯,一次一个点。

with open("filename.txt") as inf:
    puzzle = [
        [0 if el == '.' else int(el) for el in line if el.strip()] 
        for line in inf]

那个列表comp虽然有点拗口。我们来看看吧。

puzzle = [ ... ]

基本列表comp语法。这里没什么可说的

[ [ 0 if el == '.' else int(el) for el in line if el.strip() ] ... ]

这是满口的,但它基本上只是一个NESTED列表组合。这个说

[ 0 if el == '.'
# if the character is a period (.), use a zero (0)
else int(el)
# otherwise, cast the character to integer since it's a number
for el in line
# we're iterating over each character in the string line
if el.strip()
# and selecting every "truthy" character (e.g. skipping the spaces)

其余部分很简单

[ ... for line in inf]
# "line" is each literal line in the file.

答案 1 :(得分:0)

Python循环结构基本上可以迭代任何东西,包括字符串,所以对于这样的事情,你所要做的就是在换行符上拆分字符串以分隔行,然后迭代这些行并将它们放入数组中,如果它们不是分隔盒子的空间之一。所以假设你想要一个二维数组中的电路板,这个列表理解就能满足你的要求。

sudoku = [[character for character in line if not character==" "] for line in lines.split("\n")]

答案 2 :(得分:0)

readlines将在行上拆分数据。此外,打开文件时始终使用with语句。

with open('sudo.txt') as f:
    lines = f.readlines()

然后您可以使用split进一步解析它:

soduku = [[list(group) for group in line.split()] for line in lines]

哪会将您的数据放在这种格式中:

[[['.', '3', '.'], ['.', '.', '.'], ['.', '.', '.']],
 [['.', '.', '8'], ['3', '9', '.'], ['6', '.', '.']],
 [['5', '.', '1'], ['2', '.', '.'], ['4', '9', '.']],
 [['.', '7', '.'], ['6', '.', '.'], ['.', '.', '.']],
 [['2', '.', '.'], ['.', '.', '.'], ['.', '4', '.']],
 [['.', '.', '.'], ['5', '.', '3'], ['9', '8', '.']],
 [['.', '.', '.'], ['.', '.', '.'], ['1', '5', '.']],
 [['.', '.', '.'], ['.', '.', '7'], ['.', '.', '9']],
 [['4', '.', '.'], ['.', '1', '.'], ['3', '.', '.']]]