在 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

答案1

$ 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 处自动关闭文件描述符,并且还会处理 open 中的错误。
  • 记录字符在当前行中的位置()并使用字符串切片符号来提取单元格名称。
  • 假设)之前没有发生过(

答案2

使用 Python重新模块和积极的后向查找,以便我们找到匹配之前的字符串,但不会将其用于结果。

在输入文件中查找所有匹配项并将它们逐行打印到输出文件中:

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

答案3

您可以链接各种拆分操作来获取单元名称。

python3 -c '
import sys 
with open(sys.argv[1]) as f:
  for l in f:
    print(l.split("(")[1].split(")")[0]) 
' input_file
XOR4DGHFDH22DSVT
ND2DGH557GGHDSVT
SDK1DNG45GKDSVT

相关内容