Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中以数组形式打开文本文件_Python - Fatal编程技术网

在python中以数组形式打开文本文件

在python中以数组形式打开文本文件,python,Python,我试图在python中以数组的形式打开一个.txt文件,以便对其中的元素进行操作。.txt文件(abc.txt)如下所示 AL192012, TONY, 20, 20121021, 1800, , LO, 20.1N, 50.8W, 25, 1011, 20121022, 0000, , LO, 20.4N, 51.2W, 25, 1011, 20121022, 0600, , LO, 20.8N, 51.5W, 25, 1010, 2012

我试图在python中以数组的形式打开一个.txt文件,以便对其中的元素进行操作。.txt文件(abc.txt)如下所示

AL192012,               TONY,     20,
20121021, 1800,  , LO, 20.1N,  50.8W,  25, 1011,
20121022, 0000,  , LO, 20.4N,  51.2W,  25, 1011,
20121022, 0600,  , LO, 20.8N,  51.5W,  25, 1010,
20121022, 1200,  , LO, 21.3N,  51.7W,  30, 1009,
AL182012,              SANDY,     45,
20121021, 1800,  , LO, 14.3N,  77.4W,  25, 1006,
20121022, 0000,  , LO, 13.9N,  77.8W,  25, 1005,
20121022, 0600,  , LO, 13.5N,  78.2W,  25, 1003,
20121022, 1200,  , TD, 13.1N,  78.6W,  30, 1002,
我试过
pd.read\u csv('abc.txt')
loadtxt(“abc.txt”)
genfromtxt(“abc.txt”)
。但他们只生成了三列的数组,可能是因为第一行只有三列。但是我希望它有与.txt文件相同的八列。这可能吗?谢谢

这里有一个片段:

#!/usr/bin/python

import sys

with open(sys.argv[1], 'r') as f:
    content = f.readlines()

for w in content:
    print w

    # split and loop again -> w.split(',')
f.readlines()
返回一个数组
w
是一个数组

>>> with open(filename) as f:
        data = [[cell.strip() for cell in row.rstrip(',').split(',')] for row in f]

>>> for row in data:
        print(row)

['AL192012', 'TONY', '20']
['20121021', '1800', '', 'LO', '20.1N', '50.8W', '25', '1011']
['20121022', '0000', '', 'LO', '20.4N', '51.2W', '25', '1011']
['20121022', '0600', '', 'LO', '20.8N', '51.5W', '25', '1010']
['20121022', '1200', '', 'LO', '21.3N', '51.7W', '30', '1009']
['AL182012', 'SANDY', '45']
['20121021', '1800', '', 'LO', '14.3N', '77.4W', '25', '1006']
['20121022', '0000', '', 'LO', '13.9N', '77.8W', '25', '1005']
['20121022', '0600', '', 'LO', '13.5N', '78.2W', '25', '1003']
['20121022', '1200', '', 'TD', '13.1N', '78.6W', '30', '1002']
如果要修复短线的索引,可以在之后明确地执行以下操作:

>>> data = [row if len(row) == 8 else row[0:1] + [''] * 3 + row[1:3] + [''] * 2 for row in data]
>>> for row in data:
        print(row)

['AL192012', '', '', '', 'TONY', '20', '', '']
['20121021', '1800', '', 'LO', '20.1N', '50.8W', '25', '1011']
['20121022', '0000', '', 'LO', '20.4N', '51.2W', '25', '1011']
['20121022', '0600', '', 'LO', '20.8N', '51.5W', '25', '1010']
['20121022', '1200', '', 'LO', '21.3N', '51.7W', '30', '1009']
['AL182012', '', '', '', 'SANDY', '45', '', '']
['20121021', '1800', '', 'LO', '14.3N', '77.4W', '25', '1006']
['20121022', '0000', '', 'LO', '13.9N', '77.8W', '25', '1005']
['20121022', '0600', '', 'LO', '13.5N', '78.2W', '25', '1003']
['20121022', '1200', '', 'TD', '13.1N', '78.6W', '30', '1002']

试着这样做:

data = []
with open("filename") as f:
  for line in f:
    data.append(line.split(","))
这将为您提供一个2D数据数组,您可以对其进行操作

如前所述,如果您想转置它,您不能只使用常规zip,您需要使用
itertools.izip\u longest

所以你可以像这样转置它:

data = list(itertools.izip_longest(*data))

那么,你认为结果中没有那么多列的那两行会出现什么呢?谢谢。如果这个数组名为b,我想通过b[5,4]得到SANDY,通过b[9,3]得到TD。谢谢。但我可以问一下,这是否给出了一个数组?似乎数据[0]给出了第一行,数据[1]给出了第二行,依此类推,类型(数据)分别是一个列表。元素[5,4]给出SANDY的数组是否存在?或者我不明白你的意思。
数据
将是一个列表列表;因此,执行
data[5][4]
将得到
SANDY
等。Python中没有直接的数组,
[5,4]
语法表明您试图使用NumPy或其他东西中的数组。我认为您可以以某种方式将列表转换为数组,但我不知道这是如何工作的,但您不一定需要这样做。使用列表很好。谢谢。我现在明白了,谢谢。但是我该怎么处理你的最后一行呢?因为当我只包括从导入到打印的五行时,type(content)是一个列表,w是唯一的content[66],它是一个字符串。请允许我问一下,你所说的再次拆分和循环是什么意思……谢谢。但如果可能的话,我可能需要更多的帮助。我只得到了一个叫做数据的列表。有没有一种方法可以得到我想要的10×8二维数组,例如[0,0]处的元素给我AL192012,[0,4]给TONY,[9,3]给TD?@user3223064这是一个二维数组,你可以在python中访问像数组[0][4]这样的元素。如果你想那样访问它,那么你就要使用
numpy
,如果你要这样做,你最好走完全程,只使用“谢谢”。你的有效。但另一方面,numpy.loadtxt()仍然只给出三列,而不是八列。无论如何