2015-02-06 46 views
3

我正在学习python编程,并坚持这个问题。我研究了其他例子,它读取文件输入并将整个事件作为单个列表或字符串link to that example但我希望每行都是一个列表(嵌套名单)我该怎么怎么了,请帮助
文本文件a.txt中如何在Python中将文件的内容写入列表?

1234 456 789 10 11 12 13 

4456 585 568 2 11 13 15 

代码的输出必须是这样的

[ [1234 456 789 10 11 12 13],[4456 585 568 2 11 13 15] ] 
+3

在“必须是这样”所需的输出中缺少引号和逗号,使得输出无法通过普通的“打印”获得,并且需要扭曲。我怀疑你只是省略了引号,逗号或两者,因为“必须”,所以请编辑Q来澄清! – 2015-02-06 19:01:38

回答

5

没有理由这样做readlines - 只是遍历文件。

with open('path/to/file.txt') as f: 
    result = [line.split() for line in f] 

如果你想整型的名单列表:

with open('path/to/file.txt') as f: 
    result = [map(int, line.split()) for line in f] 
    # [list(map(int, line.split())) for line in f] in Python3 
+1

正是我对Bhargav Rao说的!几分钟前;)Pluuuusss ... – Kasramvd 2015-02-06 18:57:52

+0

好一个....享受10k – 2015-02-06 18:58:59

+2

@BhargavRao我实际上代表今天被限制:P – 2015-02-06 18:59:26

2

你可以做

with open('a.txt') as f: 
    [[i.strip()] for i in f.readlines()] 

它将打印

[['1234 456 789 10 11 12 13'], ['4456 585 568 2 11 13 15']] 

注 - 这是回答你最初的问题打印字符串

要打印完全一样,你想不带引号,这是一个非常方法

print(repr([[i.strip()] for i in f.readlines()]).replace("'",'')) 

哪打印

[[1234 456 789 10 11 12 13], [4456 585 568 2 11 13 15]] 
2
lines = open('file.txt').readlines() # parse file by lines 
lines = [i.strip().split(' ') for i in lines] # remove newlines, split spaces 
lines = [[int(i) for i in j] for j in lines] # cast to integers 
+1

这留下了一个打开的文件处理程序的意想不到的副作用。对于一个小程序来说不是太大的事情,但不是一个很好的习惯 – 2015-02-06 18:59:11

+1

没有必要关闭,因为我们只是读不写。 – 2015-02-06 19:00:02

+2

除了你有一个打开连接的文件处理程序对象,所以垃圾收集器不能释放它。这就是内存泄漏是如何在大型项目上进行的,有人说:“我从来没有写过这个文件,所以不用担心关闭它......”正如我所说:在这种情况下,永远不要紧,但它是一种坏习惯。 – 2015-02-06 19:01:03

2

看起来像你想的整数,而不是字符串,在结果列表;如果是这样的话:

with open(filename) as f: 
    result = [[int(x) for x in line.strip().split()] for line in f] 
+1

@KasraAD,效率在这里是一个边际考虑因素(无论如何I/O时间占主导地位),并可能以任何方式 - 我的动机是listcomps更通用和可读,所以通常应该是首选的,除非有特定的原因使'map',''过滤器“,&c,在给定的情况下是优选的。与genexps(以及dict和set comprehensions)一起,listcomps构成了Python从Haskell中复制的最佳功能集合(具有更易读的语法,就像Python的习惯:-),尽管Haskell优雅的懒惰评估语义意味着他们可以逃脱一个单一的概念,而我们需要一些:-)。 – 2015-02-06 19:13:39

相关问题