데이터가 포함된 "출력" 파일이 있습니다.
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
- 관용적/파이썬적 접근 방식은 이
with-open
절을 사용하는 것입니다. 왜냐하면 eof에서 파일 설명자를 자동으로 닫고 열 때 오류도 처리하기 때문입니다. - 현재 행의 문자 위치를 기록
(
하고)
문자열 분할 표기법을 사용하여 셀 이름을 추출합니다. )
이전에는 그런 일이 발생하지 않았다고 가정(
답변2
파이썬 사용재모듈화하다공격적인 뒤돌아보기를 통해 일치 항목 이전에 문자열을 찾지만 결과에는 사용하지 않습니다.
입력 파일에서 일치하는 항목을 모두 찾아 출력 파일에 한 줄씩 인쇄합니다.
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