Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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_Arrays_File Io - Fatal编程技术网

在Python中逐行读取文本并将每个元素存储在不同的数组中

在Python中逐行读取文本并将每个元素存储在不同的数组中,python,arrays,file-io,Python,Arrays,File Io,我有以下contacts.txt文件: 0, 0.989246526088, 0.762584552317, 0.989246526088, 0.989246526088, 5, 2, 20, 91, 114, 127 1, 0.832366089749, 0.67518676348, 0.832366089749, 0.832366089749, 3, 6, 24, 114 2, 0.923079422275, 0.798673866486, 0.923079422275, 0.9230

我有以下contacts.txt文件:

 0, 0.989246526088, 0.762584552317, 0.989246526088, 0.989246526088, 5, 2, 20, 91, 114, 127
 1, 0.832366089749, 0.67518676348, 0.832366089749, 0.832366089749, 3, 6, 24, 114
 2, 0.923079422275, 0.798673866486, 0.923079422275, 0.923079422275, 5, 0, 65, 73, 91, 114
 3, 0.0820269441841, 0.879379910489, 0.0820269441841, 0.0820269441841, 3, 71, 91, 120
 4, 0.449863833595, 0.985883232333, 0.449863833595, 0.449863833595, 3, 16, 69, 104
 6, 0.887055481253, 0.623261413511, 0.887055481253, 0.887055481253, 5, 1, 25, 87, 100, 114
 7, 0.111156294437, 0.255444048959, 0.111156294437, 0.111156294437, 3, 19, 83, 111
 9, 0.514040361142, 0.373030232483, 0.514040361142, 0.514040361142, 4, 38, 59, 72, 76
 11, 0.597169587765, 0.0286747230467, 0.597169587765, 0.597169587765, 3, 56, 101, 108
 12, 0.89754811115, 0.361667992685, 0.89754811115, 0.89754811115, 3, 86, 92, 126
 13, 0.571528472894, 0.860250953547, 0.571528472894, 0.571528472894, 5, 30, 79, 82,  101, 104
 14, 0.593696200969, 0.680733858699, 0.593696200969, 0.593696200969, 3, 78, 103,   124 
对于16383或16384行,依此类推,具体取决于文件

我尝试了以下代码

with open('contacts.dat') as infile:
     n, x, y, z, radius, contact_number = [[int(num) for num in line.strip().split()[:5]] for line in infile] 
     neighbours = [[int(num) for num in line.strip().split()[5:]] for line in infile]  
它似乎不起作用

我要查找的是,对于文件的每一行,将以下内容存储到不同的数组中:

每行

  • 第零个元素-->
    n
    (其中-->表示“存储在数组中”)
  • 第一个元素-->
    x
  • 第二个元素-->
    y
  • 第三个元素-->
    z
  • 第四个元素-->
    半径
  • 第五要素-->
    联系电话
  • 行的剩余元素(如果有)-->
    相邻元素

您正试图存储输入的列,但解包会给出行。首先将其转置:

def transpose(grid):
    return zip(*grid)

替代方法:NumPy

import numpy as np
nparray = np.genfromtxt('contacts.txt',delimiter = ',')
#Where column N is accessed by nparray[:,n]

您的列表理解有一些问题——首先也是最重要的是,您正在创建一个列表列表(包含数千个条目),并试图将此列表分配给六个变量。最好使用循环。还请注意,您正在将所有内容强制转换为
int
,而有些值实际上是
浮点值
s,但强制转换仍然失败,因为分割线中仍有逗号

由于您的文件包含逗号分隔的值,我建议使用
csv
模块。这将解决拆分和逗号剥离的问题。此外,与使用一个大型列表理解不同,单独或分组提取值可能更具可读性

import csv
with open("contacts.dat") as infile:
    for line in csv.reader(infile):
        num = int(line[0])
        x, y, z, radius = map(float, line[1:5])
        contact = int(line[5])
        neighbors = map(int, line[6:])

现在提取了各个值,剩下要做的就是将它们存储在某些数据结构中,例如字典列表、名称元组或某些特殊类。

仅使用内置函数读取文件的另一种方法


def atonum(x):
如果x.find('.')<0:返回int(x)
返回浮动(x)
打开(文件名)作为内嵌:
alldata=[[Atnum(y)表示x中的y.strip().split(',')]表示填充中的x]

您的问题是什么?您能否给出一个实际的示例,说明生成的数组应该是什么,而不仅仅是一个散文式的描述?我将避免在文件上重复两次。把它放在一个循环中。另外,在几个浮点上,你调用的是代码“INT/INT/CUT>”。此外,考虑使用一些虚拟输入数据,这些数据比随机数字更具特色和可读性,如<代码> 1、0.1、0.11。…-甚至是文字,而不是数字,因为数据的情况似乎并不重要。横向建议:您是否试图将文本文件解析为“平行列表”?如果是这样,就不要这样做,而是将其解析为具有属性的对象列表。(
namedtuple
s在这方面非常好,如果您不需要可变性。) def atonum(x): if x.find('.') < 0: return int(x) return float(x) with open(filename) as infile: alldata=[[ atonum(y) for y in x.strip().split(',') ] for x in infile]