Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_File - Fatal编程技术网

Python中的分隔行

Python中的分隔行,python,list,file,Python,List,File,我有一个.txt文件。它有3个不同的列。第一个是数字。第二个是数字,从0开始一直到7。最后一句是这样的句子。我想把它们放在不同的列表中,因为它们的号码是匹配的。我想写一个函数。如何在不中断它们的情况下将它们分隔在不同的列表中 .txt的示例: 1234 0 my name is 6789 2 I am coming 2346 1 are you new? 1234 2 Who are you? 1234 1 how's going on

我有一个.txt文件。它有3个不同的列。第一个是数字。第二个是数字,从0开始一直到7。最后一句是这样的句子。我想把它们放在不同的列表中,因为它们的号码是匹配的。我想写一个函数。如何在不中断它们的情况下将它们分隔在不同的列表中

.txt的示例:

1234    0    my name is
6789    2    I am coming
2346    1    are you new?
1234    2    Who are you?
1234    1    how's going on?
我一直这样保存它们:

----1----   

1234    0    my name is 

1234    1    how's going on? 

1234    2    Who are you?

----2----   

2346    1    are you new?


----3-----   

6789    2    I am coming
到目前为止,我所尝试的:

inputfile=open('input.txt','r').read()

m_id=[] 
p_id=[] 
packet_mes=[]

input_file=inputfile.split(" ")

print(input_file)

input_file=line.split() 
m_id=[int(x) for x in input_file if x.isdigit()] 
p_id=[x for x in input_file if not x.isdigit()]

使用当前的方法,您将整个文件作为字符串读取,并在空白处执行拆分(您更愿意在换行符上拆分,因为每一行都由换行符分隔)。此外,您没有正确地将数据隔离到不同的列中


您有3列。您可以使用
str.split(无,2)
将每行拆分为3部分。
None
表示在空间上拆分。每个组将作为密钥列表对存储在字典中。在这里,我使用了一个
OrderedDict
,以防您需要维护顺序,但是您可以像使用相同分组(但没有顺序!)的普通字典一样轻松地声明
o={}


在处理文件I/O时,请始终将
与…作为上下文管理器一起使用-这有助于生成干净的代码。另外,请注意,对于较大的文件,在每一行上迭代会更节省内存。

使用当前的方法,您将整个文件作为字符串读取,并在空白处执行拆分(您更愿意在换行符上拆分,因为每一行都由换行符分隔)。此外,您没有正确地将数据隔离到不同的列中


您有3列。您可以使用
str.split(无,2)
将每行拆分为3部分。
None
表示在空间上拆分。每个组将作为密钥列表对存储在字典中。在这里,我使用了一个
OrderedDict
,以防您需要维护顺序,但是您可以像使用相同分组(但没有顺序!)的普通字典一样轻松地声明
o={}


在处理文件I/O时,请始终将
与…作为上下文管理器一起使用-这有助于生成干净的代码。另外,请注意,对于较大的文件,在每一行上迭代会更节省内存。

也许您需要这样的内容:

import re

# Collect data from inpu file
h = {}
with open('input.txt', 'r') as f:
    for line in f:
        res = re.match("^(\d+)\s+(\d+)\s+(.*)$", line)
        if res:
            if not res.group(1) in h:
                h[res.group(1)] = []
            h[res.group(1)].append((res.group(2), res.group(3)))

# Output result
for i, x in enumerate(sorted(h.keys())):
    print("-------- %s -----------" % (i+1))
    for y in sorted(h[x]):
        print("%s %s %s" % (x, y[0], y[1]))
结果如下(如果愿意,请添加更多换行):

它基于正则表达式(python中的模块re)。当您想要匹配简单的基于线的模式时,这是一个很好的工具

在这里,它依赖于空间作为列分隔符,但也可以很容易地适用于固定宽度的列

结果收集在列表字典中。每个列表包含位置和文本的元组(对)


程序等待输出以对项目进行排序。

也许您需要这样的内容:

import re

# Collect data from inpu file
h = {}
with open('input.txt', 'r') as f:
    for line in f:
        res = re.match("^(\d+)\s+(\d+)\s+(.*)$", line)
        if res:
            if not res.group(1) in h:
                h[res.group(1)] = []
            h[res.group(1)].append((res.group(2), res.group(3)))

# Output result
for i, x in enumerate(sorted(h.keys())):
    print("-------- %s -----------" % (i+1))
    for y in sorted(h[x]):
        print("%s %s %s" % (x, y[0], y[1]))
结果如下(如果愿意,请添加更多换行):

它基于正则表达式(python中的模块re)。当您想要匹配简单的基于线的模式时,这是一个很好的工具

在这里,它依赖于空间作为列分隔符,但也可以很容易地适用于固定宽度的列

结果收集在列表字典中。每个列表包含位置和文本的元组(对)


程序等待输出以对项目进行排序。

这是一段相当难看的代码,但很容易理解

raw = []
with open("input.txt", "r") as file:
    for x in file:
        raw.append(x.strip().split(None, 2))
raw = sorted(raw)

title = raw[0][0]
refined = []
cluster = []
for x in raw:
    if x[0] == title:
        cluster.append(x)
    else:
        refined.append(cluster)
        cluster = []
        title = x[0]
        cluster.append(x)
refined.append(cluster)

for number, group in enumerate(refined):
    print("-"*10+str(number)+"-"*10)
    for line in group:
        print(*line)

这是一个相当难看的代码,但很容易理解

raw = []
with open("input.txt", "r") as file:
    for x in file:
        raw.append(x.strip().split(None, 2))
raw = sorted(raw)

title = raw[0][0]
refined = []
cluster = []
for x in raw:
    if x[0] == title:
        cluster.append(x)
    else:
        refined.append(cluster)
        cluster = []
        title = x[0]
        cluster.append(x)
refined.append(cluster)

for number, group in enumerate(refined):
    print("-"*10+str(number)+"-"*10)
    for line in group:
        print(*line)

你想按ID分组吗?好吧,到目前为止你试过什么?不,你一定试过什么?有什么吗?这是一个非常简单的问题。你不能期望在没有付出真正努力的情况下,就把所有问题的解决方案交给你,对吗?你能把这一点补充到你的问题中吗?编辑问题正文。单击。你想按ID对它们进行分组吗?好的,到目前为止你尝试了什么?不,你一定尝试了什么?有什么吗?这是一个非常简单的问题。你不能期望在没有付出真正努力的情况下,就把所有问题的解决方案交给你,对吗?你能把这一点补充到你的问题中吗?编辑问题正文。单击。在python中,3个字典已排序。@EnderLook 3.6 Only是的,对不起。我只使用Python3.6,所以对我来说,字典总是有序的。在Python3中,字典是有序的。@EnderLook 3.6 onlyah,对不起。我只使用Python3.6,所以对我来说字典总是有序的。