簡體   English   中英

重新組合文本文件的行

[英]Regrouping lines of a text file

我正在使用Python腳本生成一些Stata命令。 輸出是一個文本文件。 我想使用Python對屬於同一觀察結果的行進行分組,當前情況並非如此。

該文件中的典型行(我們稱其為file.txt)為:

[something something] if a == 1 & b == 2 & c == 3 & [other things]

其中a,b和c是識別變量。 (a,b,c)三元組唯一地標識一個觀察。 我正在嘗試通過將與同一觀察結果相關的所有行分組在一起來對file.txt進行排序。

例如,從:

replace k = 1 if a == 1 & b == 2 & c == 3 & comments_1 == "I wish I was better at Python"

replace k = 2 if a == 1 & b == 3 & c == 4 & comments_1 == ""

replace g = "Example" if a == 1 & b == 2 & c == 3 & comments_1 == "I wish I was better at Python"

至:

replace k = 1 if a == 1 & b == 2 & c == 3 & comments_1 == "I wish I was better at Python"


replace g = "Example" if a == 1 & b == 2 & c == 3 & comments_1 == "I wish I was better at Python"


replace k = 2 if a == 1 & b == 3 & c == 4 & comments_1 == ""

輸入的第1行和第3行在輸出中彼此相鄰,因為它們涉及相同的觀察值(相同的a,b,c三元組)。 這與按字母順序排序不同,因此我不能使用sort()。

我的計划是:

創建一個空字典dict [tuple [int]:set [str]]

讀取文本文件的每一行。 對於每一行,通過搜索'a =='之后和'b =='之前的字符來獲取三元組。

如果三元組在字典中,則將該行作為字符串添加到三元組指向的集合中。 如果不是,請創建條目並添加字符串。

對於每個條目集中的每個字符串,在文件中寫入字符串。

我相信可以對文件進行排序。

那行得通嗎? 有更好的方法嗎?

謝謝!

聽起來不錯。 您可以使用正則表達式提取觀測值。 例如,假設觀測值由正整數組成,則可以使用:

import re
line = 'replace k = 1 if a == 1 & b == 2 & c == 3 & comments_1 == "test"'
m = re.search(r'a == (\d+) & b == (\d+) & c == (\d+)', line)
observation = tuple(map(int, m.groups()))
print(observation)

這將打印元組(1, 2, 3)

這是一個很好的方法,但是由於您要保留所有行,因此,我不會麻煩使用相同的三元組對行進行分組:只需列出所有行並將其值以三元組作為排序鍵即可對它們進行排序。

def getvalues(line):
    """Extract a value triple from a line that matches the pattern"""
    m = re.search(r"if a == (\d+) & b == (\d+) & c == (\d+) &", line)
    if m:
        return tuple(int(v) for v in m.groups())
    else:
        return line   # Lines that don't match the pattern are sorted normally

with open("file.txt") as fp:
    lines = fp.readlines()

lines.sort(key=getvalues)

上面假設所有行都有相同的變量名,空格等。如果不是,則需要詳細說明正則表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM