Python
在python中列印特定的單詞
我有一個包含數據的文件
cell (XOR4DGHFDH22DSVT) { cell (ND2DGH557GGHDSVT) { cell (SDK1DNG45GKDSVT) {
我希望輸出是
XOR4DGHFDH22DSVT ND2DGH557GGHDSVT SDK1DNG45GKDSVT
我想在另一個文件中使用 Python 2.7.5 獲得這個輸出。
我嘗試使用
re.findall()
但split()
無法獲得它。我使用的程式碼是:c2= open("out1", 'w') file1= open("out","r") for c in file1: split_lines = c.split(" ") print(split_lines[1]) >> c2
使用 Python re 模組和正向look-behind,以便我們在匹配之前找到字元串,但不要將其用於結果。
在輸入文件中查找所有匹配項並將它們逐行列印到輸出文件中:
import re with open('input_file.txt', 'r') as f: m = re.findall('(?<=cell \()[^)]*', f.read()) with open('output_file.txt', 'w') as f: for x in m: f.write(x+"\n")
以下是對正則表達式的一些解釋:
'(?<= cell \( ) [^)]*' positive look-behind= ------- match all to the next closing parenthesis
您可以將正則表達式修改為更嚴格的形式:
'(?<=cell \()[^)]*(?=\) {)'
如果您還想使用前瞻,請
) {
在任何匹配後明確要求。測試
> cat input_file.txt cell (XOR4DGHFDH22DSVT) { test(test) } cell (ND2DGH557GGHDSVT) { cell (SDK1DNG45GKDSVT) { > python3 test.py > cat output_file.txt XOR4DGHFDH22DSVT ND2DGH557GGHDSVT SDK1DNG45GKDSVT
$ python3 -c 'import sys with open(sys.argv[1]) as f: for l in f: a, b = map(lambda x: l.find(x), ["(",")"]) print(l[a+1:b]) ' out > out1 $ cat out1 XOR4DGHFDH22DSVT ND2DGH557GGHDSVT SDK1DNG45GKDSVT
- 慣用方式/pythonic方式是使用該
with-open
子句,因為它會在 eof 處自動關閉文件描述符,並且還會處理打開時的錯誤。- 記錄字元在目前行中的位置,
(
並)
使用字元串切片表示法提取單元名稱。- 假設
)
之前沒有發生(