2012-03-01 5 views
3

입력 파일을 지정하고 해당 파일의 행을 가져 와서 지정된 파일로 복사하는 스크립트를 만들려고합니다. 지금까지 나는 내 목표에 꽤 가까이 다가 갈 수 있었지만, 내가 달려 가고있는 문제와 내가 (적어도 내가 이해할 수있는) 답을 찾을 수없는 것 같다. 나는 내 문자열을 검색 할 때 단어 "not"또는 "is"또는 다른 스크립팅 용어가 내 문자열에있는 것처럼 작동합니다. 즉, "내가 원하는 것은 아닙니다"와 같은 것을 검색하면 연산자가 아닌 작업을 수행하고 아무 것도 복사하지 않습니다. 그래서 내 질문은 내 일을 멈추기 위해 내가 할 수있는 일이라고 생각한다. (내 스크립트를 맨 아래에 추가했는데 처음 시도는 친절하다.)한 파일의 행을 다른 파일로 복사

두 번째 질문은 아마도 프로그램이지만 어쨌든 물어볼 것입니다. 위의 경우와 마찬가지로 1000 줄의 항목 (단락과 같은 개별 줄)이있는 txt 파일이 있고 그 중 250 줄은 "이 줄을 복사하고 싶은 줄"로 시작하지만 각각의 이유는 각각 (왜이 보라색 등 원인이되는 내용을 복사하고 싶은 줄입니다.) 이제 스크립트는 첫 번째 "이 부분을 복사하려고합니다."라는 내용을 가져 와서 그곳에 남겨 두었습니다. 모든 줄에서 문자열의 나머지 부분을 가져 왔습니까? 내가 재판을하지만 일부 자체 교육을 시도하고 나는 데 문제만큼이나 혼란 나는이 문제 해결에 걸쳐 실행되는 용어의 일부 오류입니다 때문에

는 다시이

#This will let you search for a string in a file and transfer it to another file 
#It will search for texts or numbers 

print "This is a tool to search one file and transfer information to another." 
print 
#select source file 
a=open(raw_input("Enter full path of source file using using \\ instead of \: "), "r") 
#select destination file 
b=open(raw_input("Enter full path of destination file using \\ instead of \: "), "a")  
a 
b 
#actual copy command 
copy=raw_input("What are you searching for: ") 
for line in a.readlines(): 
    if copy in line: 
     b.write(copy + '\n') 
     yes='y' 
     for again in raw_input("Would you like to search for another line? y/n: "): 
      if again in yes:   
       copy=raw_input("What are you searching for: ") 
       if copy in line: 
        b.write(copy + '\n') 
    b.close 
    a.close 
+0

당신은'in' 연산자를 남용하고 있습니다.''예 ':''다시''= 연산자'를 사용해야합니다. 만약'if again.lower(). startswith ('y ')와 같은 퍼지 스타일 연산자를 사용하는 것이 더 좋습니다 : '. –

+0

다음에 더 자세한 설명 제목을 사용하십시오. – tr9sh

답변

1
) = 쉬운 일 수 있지만, 수

"내가 원하지 않는 것"과 같은 것을 검색하면 연산자가 작동하지 않고 아무것도 복사하지 않습니다.

그건 불가능합니다. 사실, 나는 방금 노력했지만, 그런 일은하지 않습니다. 당신이 잘못하고있는 뭔가가 있어야합니다.

모든 줄에서 나머지 문자열을 가져 오는 것이 있습니까?

raw_inputinput를 사용

b.write(line) 
0

b.write(copy + '\n') 

방금 ​​전환 했 교체? 설명하는 문제 (경로에서 역 슬래시를 두 번 사용해야한다고 생각한다는 사실)는 Python 2에서 input()을 사용하여 터미널에서 읽을 때 발생합니다. raw_input에는 이러한 문제가 없어야합니다.

두 번째 문제는 분명하다 : (@ 라스 단지 지적으로, line 이미 줄 바꿈을 포함), b.write(copy + '\n')

b.write(line) 

는하지 마십시오

아마도
+0

'line'은 이미 줄 바꿈이 추가됩니다. –

+0

또한 "\\ please"와 "r"의 차이점을 확인하십시오 \\ please "" – alexis

+0

도움을 주셔서 감사합니다! 내가이 물건을 통해 자신의 길을 다소 걸림돌이라고 말했듯이, 나는 '\'와 2x '\'로 입력을 사용하려고 시도했다. 그리고 무효 구문을 말해 줄 것이다. 구문 파일을 열 수있는 유일한 방법은 원시 입력과 이중 슬래시로, 왜 = – user1242747

0

더 될 것 파이썬의 re 모듈을 사용하여 도움이 여기에.

#All your existing code to retrieve input and output file names, etc. 
#Convert the user's search string into a raw string 
copy = eval("r'%s'" % (raw_input("What are you searching for?: "),)) 

import re 

searchRegEx = re.compile(copy) 

for line in a: 
    matched = searchRegEx.search(line) 

if matched != None: 
    b.write(line) 

둘째, 대신 전체를 포장하는 것이 더 현명 할 수있는 사용자가 (당신이 이미 검색하는 동안) 다른 라인을 검색하고자하는 경우 요청하는 중첩 루프를 가진의 "GET 검색 : 예를 들어, 문자열 입력 및 검색 로직 수행 "을 반복적으로 호출하여 사용자가 검색을 계속하는 동안 (즉, 부울을 사용하여 흐름을 제어하는 ​​경우 True로 설정된 경우 사용자가 요청할 때 'y'를 입력하는 경우)).

건배!

관련 문제