Python中的分隔行
我有一个.txt文件。它有3个不同的列。第一个是数字。第二个是数字,从0开始一直到7。最后一句是这样的句子。我想把它们放在不同的列表中,因为它们的号码是匹配的。我想写一个函数。如何在不中断它们的情况下将它们分隔在不同的列表中 .txt的示例: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
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,所以对我来说字典总是有序的。