2017-11-22 4 views
-1

나는, 인터넷 검색 및 파이썬 책 ...를 읽고 하루 종일 보냈다 내가 여기서 잘못하고 있어요 확실하지 않다파이썬 렌() 혼란

나는 다음과 같은 기능을 가지고 : 나는 '

def extract(inNo, inputFile2, outputFile): 
    ifile = open(inputFile2, 'r') 
    ofile = open(outputFile, 'w') 
    lines = ifile.readlines() 
    for line in lines: 
     print(str(len(line))) 
     if str(len(line)) == str(inNo): 
      ofile.write(line) 

len()을 이해하려고 노력하면서, 나는 그것을 사용할 때 이상한 결과를 얻는 것처럼 보입니다. 내 입력 파일은 다음과 같다 :

2 
3 
4 
5 
6 
7 
8 
8 

및 출력 파일이된다 : 나는 inNo 변수 출력으로 '7'을 사용하는 경우 이제

1 
22 
333 
4444 
55555 
666666 
7777777 
88888888 

(즉, print) 내가 얻을입니다 :

666666 

내가 1 예에서 python.exe를 길이 카운트 시작 체크인부터 확신 :

len('123') 

3 

len()에 대한 이해가 잘못의 결과를 줄 것이다, 또는 내가 잘못 코딩입니까?

기본적으로이 기능의 역할은 다음과 같습니다. 인수로서 입력, 출력 및 문자 길이가 필요합니다. 이들은 다른 함수에서 왔고 두 번째 함수는 인수로 이것을 호출합니다.

이 함수는 입력 파일에서 행을 읽습니다. 모든 행에 대해 문자 길이를 가져 와서 입력 번호와 비교합니다. 동일하면 해당 행을 출력 파일에 작성해야합니다. 나는 "else"가 없다고 가정합니다. 반복해야합니다. print() 함수를 사용하면 계산 된 길이를 정확하게 볼 수 있습니다.

len() 즉 len (line) +1에 '- 1'또는 '+1'을 추가하려고하면 더 이상한 일이 발생합니다.

+2

'len (123)'은 3이 아닙니다.'len (123)'은 길이가 없기 때문에 TypeError를 발생시킵니다. – user2357112

+6

입력 파일의 각 행은 개행 문자로 끝납니다. 파이썬의 readlines() 함수는이 라인 끝을 제거하지 않습니다. 따라서 각 줄의 길이는'charactersYouCanSee + 1'이고,'666666' 줄은 실제로'666666 \ n '('\ n'은 한 글자)입니다. – Bilkokuya

+0

또한''\ n '' 문자가 있다는 것을 명심하십시오 모든 라인. 줄 바꿈을 표시하는 편집기 사용 –

답변

4

len()도 줄 바꿈 문자 \n을 고려하므로 마지막 줄을 제외한 모든 줄에서 한 줄씩 더 늘려야합니다.