[英]Python. How to get needed lines from file
我有一個這樣的文件(聊天文件,約5GB)
XX, XX[14:59]:
hello YY.
how are you today?
YY, YY [14:59]:
Hi
good, thank you, and you~
XX, XX[15:00]:
thanks, I am good)
YY, YY [15:00]:
;)
我寫了一些正則表達式,以便可以看到名稱更改。
def is_service_desk_line(line):
return re.match("XX, XX \[[0-9]+:[0-9]+[ A-Z]*\]:", line)
def is_someone_else_line(line):
return re.match("YY, YY *\[[0-9]+:[0-9]+[ A-Z]*\]:", line)
我不知道如何讀取文件以及如何設置“觸發器”(例如,一旦該行與服務台行匹配,就開始寫屬於用戶XX的下一行,直到該行與某人的其他行匹配為止。
我只需要屬於XX用戶的消息行。
我知道如何在Python中讀取文件,但是如何設置“觸發器”?
更新:
我需要的輸出只是屬於XX用戶的一行:
hello YY.
how are you toda?
thanks, I am good)
如果我對問題的理解正確,則可以使用以下方法:
f = open("input_file")
lines = f.readlines()
f.close()
for line in lines:
if is_service_desk_line(line):
print("This is a service desk line", line)
elif is_someone_else_line(line):
print("This is someone else", line)
else:
print("This is neither", line)
如果您只希望來自用戶XX的行,則只需使用if
語句(否,否則,等等),它將僅輸出該用戶的行。
要僅輸出用戶XX的行,可以使用以下命令:
f = open("input.txt")
lines = f.readlines()
f.close()
print_line = False
for line in lines:
if is_someone_else_line(line):
print_line = False
if print_line:
print(line)
if is_service_desk_line(line):
print_line = True
輸出為:
hello YY.
how are you today?
thanks, I am good)
我做的!
編碼:
def get_messages(w_file, r_file):
trigger = ""
someone_else_line = ""
with open(w_file, "wb") as w:
with open(r_file, "r") as r:
for line in r:
if is_service_desk_line(line):
trigger = line
continue
elif is_someone_else_line(line) or is_different_support(line):
trigger = line
someone_else_line = trigger
continue
elif line.startswith("From"):
trigger = someone_else_line
elif is_service_desk_line(trigger):
w.write(line)
封閉:)
您的文件很大,我不建議您使用readlines()
將整個內容讀入內存
內存有效的版本將遵循以下原則:
out_flag = False
with open('input_file.txt', 'r') as in_file:
for line in in_file:
if is_service_desk_line(line):
out_flag = True # sets output flag
continue # skips that line
if is_someone_else_line(line):
out_flag = False # sets output flag
if out_flag:
print(line)
匹配當前行之后,需要打印所有值,直到另一個用戶行為止。 因此,您需要為任何用戶添加一個正則表達式,以知道何時停止打印行並再次檢查某個用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.