Python

在python中列印特定的單詞

  • October 12, 2020

我有一個包含數據的文件

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 處自動關閉文件描述符,並且還會處理打開時的錯誤。
  • 記錄字元在目前行中的位置,() 使用字元串切片表示法提取單元名稱。
  • 假設) 之前沒有發生(

引用自:https://unix.stackexchange.com/questions/613981