[英]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.