2017-12-21 3 views
1

.txt 파일의 마지막 줄을 읽는 것에 대한 다른 질문이 있지만 분명히 답변을 이해하지 못하고 내 코드에 적용하는 방법을 알지 못합니다.for 루프를 사용하여 여러 줄의 .txt 파일을 인쇄하려고합니다. 마지막 줄 세 개가 항상 누락되었습니다.

나는 각 번호에 대한 새로운 줄인 .txt 파일에 일련의 숫자를 쓰는 간단한 프로그램을 만들었습니다. 그런 다음 인쇄 할 수있는 수를 선택할 수 있습니다.

어떤 이유로, 예를 들어, 마지막 3 줄이 골대를 벗어났습니다 :

  • 나는 다음 단계에서 파일
  • 에 100 개 번호를 작성하는 선택, 나는 n 개의 행을 인쇄하도록 선택할.
  • n-3 라인 만 인쇄합니다!

인쇄하려는 줄 수에 3을 추가하여 "해결할 수 있지만"그럴 수 없습니다. 나는 이것이 왜 일어나고 있는지 이해하지 못한다. .txt 파일에는 빈 줄이 없습니다. 그것은 말 그대로 처음부터 끝까지 한 줄에 하나의 번호가있는 파일입니다.

코드는 이것이다 : 사전에

print("How many numbers to write on file?") 
x = input() 
x = int(x) 

file = open("bla.txt", "w") 

for i in range(0,x): 
    file.write(str(i)) 
    file.write("\n") 

file.close() 

print("How many numbers to print?") 

y = input() 
y = int(y) 

file = open("bla.txt", "r") 

for j in range(0,y): 
    print(file.readline(j)) 

file.close() 

print("Done!\n") 

감사합니다!

답변

5

readline에 대한 인수는 라인의 번호가 아닙니다, 그것은 알 수 얼마나 많은 문자 readline 방법이 가장에 을 읽을 수있다. print(file.readline(i))이 아니라 print(file.readline())을 사용하십시오.

그렇지 않으면 입력 5를 들어,이 상황이 발생합니다 파일의 내용은

1\n2\n3\n4\n5\n 

있는 자, 첫 번째 반복은 빈 문자열 ''를 반환 0 최대 문자를 읽습니다. 이것은 개행 문자로 인쇄됩니다. 두 번째 숫자는 자이고 최대 문자 수는 0입니다. 이것은 개행 문자로 인쇄됩니다. 세 번째 읽기는 최대 자를 읽지 만 개행 문자를 즉시 ​​충족하고 하나만 개행 만있는 문자열을 반환합니다. 이것은 print의 여분의 개행 문자와 함께 인쇄됩니다. 이제 4를 읽으면 최대 3 자까지 읽을 수 있으며 이제는 2자인 '3\n' 문자열을 반환합니다. 이것은 여분의 개행 문자와 함께 인쇄됩니다. 마지막으로, 마지막 읽기는 최대 4자를 읽고, '5\n'을 리턴하며, 다시 여분의 개행이 인쇄됩니다.


마지막으로 아무도 실제 파이썬 코드를 작성하지 않습니다. 대신 다음을 시도해보십시오

# you can add a prompt to the input itself 
num_lines = int(input("How many numbers to write on file? ")) 

# with will automatically close the file upon exit from the block 
with open("bla.txt", "w") as output_file: 
    # 0 as start implied 
    for i in range(num_lines): 
     # print will format the number as a string, a newline is added automatically 
     print(i, file=output_file) 

num_lines = int(input("How many lines to read? "))  
with open("bla.txt", "r") as input_file: 
    # _ is the common name for a throw-away variable 
    for _ in range(num_lines): 
     # get the *next* line from file, print it without another newline 
     print(next(input_file), end='') 

# or to read *all* lines, use 
# for line in file: 
#  print(line)  

print("Done!") 
+0

[io.IOBase.readline] (https://docs.python.org/3/library/io.html#io.IOBase.readline) – Galen

+0

장 - FrançoisFabre 그래 @, 그러나이 경우 출력은 약간 특이해서 대답을 작성하기로 결정했습니다. –

+0

감사합니다. 나중에 "with"및 "as"명령에 익숙해지면 나중에 코드를 저장합니다. 나머지는 매우 친숙합니다.나는 이제 막 시작 했으므로 나는 적어도 읽을만큼 좋은 방법으로 코드를 작성한다. – playlist

관련 문제