将一行拆分为多行,但使用python重复名称
我有一个输入文件(固定宽度格式)文本文件,如下所示:将一行拆分为多行,但使用python重复名称,python,python-3.x,unix,Python,Python 3.x,Unix,我有一个输入文件(固定宽度格式)文本文件,如下所示: id1|col2|col3|...|timestamp1,timestamp2,timestamp3,timestamp4,timestamp5 id2|col2|col3|...|timestamp1,timestamp2 id3|col2|col3|...|timestamp1 ... ID具有不同数量的时间戳。所需输出的结构应为:每个id应具有一个时间戳,第二个时间戳应位于前面具有相同id的不同行上 id1|col2|
id1|col2|col3|...|timestamp1,timestamp2,timestamp3,timestamp4,timestamp5
id2|col2|col3|...|timestamp1,timestamp2
id3|col2|col3|...|timestamp1
...
ID具有不同数量的时间戳。所需输出的结构应为:每个id应具有一个时间戳,第二个时间戳应位于前面具有相同id的不同行上
id1|col2|col3|...|timestamp1
id1|col2|col3|...|timestamp2
id1|col2|col3|...|timestamp3
id1|col2|col3|...|timestamp4
id1|col2|col3|...|timestamp5
id2|col2|col3|...|timestamp1
id2|col2|col3|...|timestamp2
id3|col2|col3|...|timestamp1
我试着用sql阅读它,但有点乏味。我想看看Python或unix中是否有答案。非常感谢。您可以使用split(“|”)来使用
分隔符剪切行,然后使用split(“,”)将最后一个字段剪切为时间戳列表
with open('/path/to/file', 'r') as f:
for line in f:
fields = line.split('|')
timestamps = fields[-1].split(',')
for timestamp in timestamps:
print('|'.join(fields[:-1]+[timestamp]))
在要求他人为您编写代码之前,请在发布问题之前向我们展示您的尝试。在没有任何代码的情况下问这样的问题看起来像是家庭作业,这不是stackoverflow的目的。我对Unix或Python不熟悉。我尝试使用sql的子字符串函数。但我无法获得所需的输出。我搜索了一些类似的代码,但需要修改,因为我的文件不同:对于打开的行(“h2.txt”):line=line.strip().split(“,”)对于第[1:]:if”,“in item:item=item.split(“,”)行中的项,否则:item=item.split()对于项目中的i:print“%s |%s”%(第[0]行),i)@AdamSmith也许我应该重新表述我的第二句话。我想说的是,在没有表现出自己解决问题的任何努力的情况下提出问题不是你应该在stackoverflow上做的。当我看到这样一个问题时,在我看来,用户甚至没有研究这个问题,并期望在这里发布它将神奇地解决所有问题(我不是在谈论当前的问题,我是在谈论一般问题)。@Dvorog注意到并同意。我认为所谓的“家庭作业”辩论是分散注意力的,因为所有的问题都应该按照相同的标准来处理。谢谢你,格里尼奥。这是有效的:在f:line=line.strip()fields=line.split(“|”)timestamps=fields[-1]中,open('h6.txt','r')作为f:for line,在f:line=line.strip()fields=line.split('.')timestamps=fields[-1]+[timestamp])中,在timestamps:print('.'.'.')中为timestamps拆分(',')。jo