Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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
如何在Python3中解析文件中的行时省略不需要的字符_Python_Python 3.x - Fatal编程技术网

如何在Python3中解析文件中的行时省略不需要的字符

如何在Python3中解析文件中的行时省略不需要的字符,python,python-3.x,Python,Python 3.x,问题: 我得到了一个.dat文件,其中包含3列100个数据(id号、对象重量、对象值),这些数据由一些空格/制表符分隔(见下文)。为了我在马尔可夫模型类中的作业,我只需将所有这些数据重写到一个3x100数组中,以用于我的模拟。但是,如果列表不再存在,我将无法手动执行此步骤,因此我想学习如何正确读取.dat文件的每一行,以便将每个数据值放入一个(100x3)二维矩阵/列表中,称为“数据”。重申一下,这与家庭作业无关,我只想了解使用python 3高效输入如此大数据文件的最佳方法 .dat输入文件的

问题: 我得到了一个.dat文件,其中包含3列100个数据(id号、对象重量、对象值),这些数据由一些空格/制表符分隔(见下文)。为了我在马尔可夫模型类中的作业,我只需将所有这些数据重写到一个3x100数组中,以用于我的模拟。但是,如果列表不再存在,我将无法手动执行此步骤,因此我想学习如何正确读取.dat文件的每一行,以便将每个数据值放入一个(100x3)二维矩阵/列表中,称为“数据”。重申一下,这与家庭作业无关,我只想了解使用python 3高效输入如此大数据文件的最佳方法

.dat输入文件的前八行如下所示。发布的格式与复制到问题框中时的外观不同,但我不想为了格式而对其进行编辑,以防与问题相关

%%id     weight (metric tons)    value (1000 USD) 
1    45220           28312 
2    38764           22635 
3    24801           21689 
4    4507            22864 
5    57671           12037 
6    64263           15571 
7    59482           1618 
在阅读了与python解析相关的其他答案之后,我认为我应该从一个类似于下面的结构开始

with open('Packing.dat') as f:
    for line in f:
        for i in range(len(line)):
            #functionThatMovesDownLineAndDistributesData(char)
我想学习的是如何解析每个数据行,忽略数据之间的所有空格,并将这三种数据类型分布到一个2维数组中以供以后处理

  • 当我向下移动时,我如何忽略任何不是数字的东西
  • 我如何建立一个系统,知道特定数据何时被解析并准备添加到二维矩阵?这些值的大小并不总是相同的,但它们总是由至少一个空格/制表符分隔

  • 非常感谢任何愿意提供帮助的人

    试试下面的方法。我正在遍历文件,跳过第一行,然后解析出整数并将其保存到列表中。
    将行拆分为多个元素,并考虑多个空格 e、 g


    非常感谢你!但我不太明白发生了什么。items=line.split()是否将行拆分为每个单独的字符?将单个值附加到数据时,类别之间的区别在哪里出现?阅读这段代码,我会认为输出应该是[[14522028312],[23876422635],…]。
    line = '1    45220           28312'
    print(line.split())
    #['1', '45220', '28312']
    
    datas = []
    with open('Packing.dat') as f:
        #Ignore the first line with column description
        next(f)
        #Iterate through lines in the file
        for line in f:
            data = []
            #Get all elements in each line in a list
            items = line.split()
            #Append these elements to a list
            for item in items:
                data.append(int(item))
            #Append the elements list to a bigger list
            datas.append(data)
    print(datas)
    #[[1, 45220, 28312], [2, 38764, 22635], [3, 24801, 21689], [4, 4507, 22864], [5, 57671, 12037], [6, 64263, 15571], [7, 59482, 1618]]