Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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_File - Fatal编程技术网

如何阅读;“嗯”;从python中的文件

如何阅读;“嗯”;从python中的文件,python,file,Python,File,我必须读取一个格式始终相同的文件 据我所知,它的格式与我可以readline()和标记化的格式相同。但我想有一种方法可以读得更多,如何说“好看” 我必须读取的文件具有以下格式: Nom NMS-01 MAC AAAAAAAAAAA UDPport 2019 TCPport 9129 我只是想用一种不同的方式来阅读它,而不必标记,如果可能的话,熊猫会做很多神奇的事情,所以也许这对你来说更漂亮 import pandas as pd pd.read_csv('input.txt',sep = '

我必须读取一个格式始终相同的文件

据我所知,它的格式与我可以readline()和标记化的格式相同。但我想有一种方法可以读得更多,如何说“好看”

我必须读取的文件具有以下格式:

Nom NMS-01
MAC AAAAAAAAAAA
UDPport 2019
TCPport 9129

我只是想用一种不同的方式来阅读它,而不必标记,如果可能的话,熊猫会做很多神奇的事情,所以也许这对你来说更漂亮

import pandas as pd

pd.read_csv('input.txt',sep = ' ',header=None,index_col=0)
这将为您提供一个可以进一步操作的数据帧:

0       1
Nom     NMS-01
MAC     AAAAAAAAAAA
UDPport 2019
TCPport 9129

你的问题似乎暗示“标记化”是一种神秘而复杂的过程。但事实上,您正试图做的事情正是标记化

下面是一种非常有效的方法,可以读取显示的文件,将其分解为令牌,并将其存储在数据结构中:

def read_file_data(data_file_path):
    result = {}
    with open(data_file_path) as data_file:
        for line in data_file:
            key, value = line.split(' ', maxsplit=1)
            result[key] = value
    return result
这并不复杂,代码也不多,不需要第三方库,而且易于使用:

data = read_file_data('path/to/file')
print(data['Nom'])  # prints "NMS-01"
现在,这个实现对文件的结构做了很多假设。除其他外,它假定:

  • 整个文件的结构为键/值对
  • 每个键/值对都适合一行
  • 文件中的每一行都是键/值对(无注释或空行)
  • 键不能包含空格字符
  • 该值不能包含换行符
  • 同一个键在文件中不会出现多次(如果出现,则最后一个给定的值是唯一返回的值是可以接受的)
其中一些假设可能是错误的,但对于您提供的数据样本,它们都是正确的


更一般地说:如果要解析某种结构化数据,需要了解数据的结构以及值之间的分隔方式。这就是为什么像XML、JSON和YAML这样的常见结构化数据格式(以及许多其他格式!)被发明出来的原因。一旦您了解了要解析的语言,标记化就是您编写的代码,将语言与输入的文本相匹配。

这完全取决于您想做什么:您想保持行的完整性,您想将每个单独的单词解释为字符串,还是在适当的情况下将其转换为数字?我需要文件的后半部分,我的意思是我需要“NMS-01”、“AAAA”和端口号。真正的问题是:你想如何阅读这些信息?是否要在python中填写“mom、mac、udpport和tcpport”之类的变量?那么首先不要使用文本文件,而是使用json。你只想一行一行地读吗?readline()是您的朋友。您想将值解析为整数还是其他数据类型?先读一遍,然后再施展。@Blodorn:必须标记化是什么意思?一种可能的方法是逐行读取文件并使用适当的函数解析每一行。如果您在一个文件中有多个“数据块”,请检测每个数据块,单独对其进行分离和解析。如果每个文件只有一个块,我建议逐行读取(因为这是一种非常简单的方法),将每一行拆分为元素列表或元组,并为每一行生成dict。此外,您可以考虑使用
csv
模块。不提进一步的数据处理和导出。。。