将数据保存在文本文件中

时间:2016-07-18 22:10:46

标签: python python-2.7 python-3.x

在Python中,如果我有以下文件:

1  10 
2  50 
3   8
4   9
5  16
6  18

如何将这些数据保存在两个数组中?如此?

A = [1 2 3 4 5 6]
B = [10 50 8 9 16 18]

谢谢

2 个答案:

答案 0 :(得分:2)

我们可以使用zip()执行此操作。

  

此函数返回元组列表,其中i - 元组包含来自每个参数序列或迭代的i元素。返回的列表的长度被截断为最短参数序列的长度。当有多个参数长度相同时,zip()map()类似,初始参数为None。使用单个序列参数,它返回一个1元组的列表。没有参数,它返回一个空列表。

让我举例告诉你:

In [1]: filedata = """1  10
   ...: 2  50
   ...: 3   8
   ...: 4   9
   ...: 5  16
   ...: 6  18
   ...: """

In [2]: filedata
Out[2]: '1  10 \n2  50 \n3   8\n4   9\n5  16\n6  18\n'

In [3]: data = []
   ...: for line in fdata.splitlines():
   ...:     lineParts  = line.strip().split()
   ...:     data.append(lineParts)
   ...:

In [4]: data
Out[4]: [['1', '10'], ['2', '50'], ['3', '8'], ['4', '9'], ['5', '16'], ['6', '18']]

In [5]: zip(*data)
Out[5]: [('1', '2', '3', '4', '5', '6'), ('10', '50', '8', '9', '16', '18')]

请注意,我们使用*data代替data,将列表中的每个元素解压缩为zip()的单独参数。

请注意,现在我们有两个tuple()的列表,您希望AB成为列表,因此我们使用map()进行操作,将tuple()更改为list() s:

In [15]: (A, B) = map(list, zip(*data))

In [16]: A
Out[16]: ['1', '2', '3', '4', '5', '6']

In [17]: B
Out[17]: ['10', '50', '8', '9', '16', '18']

修改:为清楚起见,完整代码位于:

filename = 'input.txt'

data = []
with open(filename, 'r') as fd:
    for line in fd:
        lineParts  = line.strip().split()
        data.append(lineParts)

(A, B) = map(list, zip(*data))

答案 1 :(得分:1)

初学者可以理解这个纯Python3代码:

#!/usr/bin/env python3

first = list()
second = list()

with open("/tmp/tmp.txt", "r") as data:
    for a in data.readlines():
        _1, _2 = a.split()
        first.append(int(_1))
        second.append(int(_2))

print("A =",first,"\nB =",second)

它会给你:

$ python3 /tmp/tmp.py
A = [1, 2, 3, 4, 5, 6]
B = [10, 50, 8, 9, 16, 18]