Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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,我有一个包含以下内容的文本文件: name1 -1 -1 -1 1 -1 1 ... ... ... nameN -1 -1 1 1 -1 1 另外,我还有一个函数,可以随机返回文件中的一个名称。有没有办法将文本文档转换为可管理的python数据类型?基本上,如果函数返回name1,我想获取与“name1”关联的整数向量。在Python中非常简单: 将数据拆分成行 对于每一行,在单元格中拆分 第一个单元格是dict键,值是其他单元格 将它们转换为int 完成了 如果要读取文件,请执行

我有一个包含以下内容的文本文件:

name1 -1 -1 -1 1 -1 1 
...
...
...

nameN -1 -1 1 1 -1 1 

另外,我还有一个函数,可以随机返回文件中的一个名称。有没有办法将文本文档转换为可管理的python数据类型?基本上,如果函数返回name1,我想获取与“name1”关联的整数向量。

在Python中非常简单:

  • 将数据拆分成行
  • 对于每一行,在单元格中拆分
  • 第一个单元格是dict键,值是其他单元格
  • 将它们转换为int
完成了

如果要读取文件,请执行以下操作:

my_dict = {}

with open('filename.txt') as data:
    for line in data:
        cells = line.split()
        my_dict[cells[0]] = [int(x) for x in cells[1:]]

print my_dict
# {'nameN': [-1, -1, 1, 1, -1, 1], 'name1': [-1, -1, -1, 1, -1, 1]}
print my_dict['name1']
# [-1, -1, -1, 1, -1, 1]
大致轮廓:

  • 迭代文件中的行
  • 拆分每行(默认字符为空格)
  • 检查名称是否匹配
  • 如果是,则通过将每个剩余元素转换为所需的整数类型来构建输出
这样,你可能会得到这样的结果:

def getData(name, file)
    for line in file:
        line = line.split()

        if line[0] == name:         
            data = [int(entry) for entry in line[1:]]
            return data  

你试了什么?嗨,埃里克。非常感谢。我不明白如何在python数据类型中转换文本文档。我来自C环境,我不明白如何让一个矩阵同时包含字符串和整数。@AMayer:Python是动态的。只要深呼吸,接受一个包含不同对象的列表是可以的:
['1',2,[3],{4:5}]
。一切都会好起来的;)对于这个答案,输出是dict。键是字符串,值是整数列表。我明白了。但是我无法打开文本文件以便使用该方法。例如,如果我使用with open(fname)作为f:content=f.readlines(),我会得到list'对象没有属性'split'。
def getData(name, file)
    for line in file:
        line = line.split()

        if line[0] == name:         
            data = [int(entry) for entry in line[1:]]
            return data