>source

나는 여전히 파이썬을 배우고 있으며 루프와 파일을 더 잘 이해하기 위해 두 가지 요소를 결합하기로 결정했습니다. 사용자로부터 여러 입력을 받아 파일에 쓰는 간단한 for 루프를 만들었습니다. for 루프 및 파일 작업 방법에 대한 몇 가지 자습서를 읽고 봅니다. 내가 원하는 것은 사용자가 문자열 줄을 쓸 때마다 위치를 나타내는 처음에 숫자가 쓰여지는 것입니다.

따라서 내가 한 줄만 쓰면 for 루프는 처음에 숫자 "1"도 씁니다. 두 줄의 문자열을 쓰면

  • 내가 가진 문제는이 방법은 디버깅에서만 다른 줄의 문자열을 계속 쓰는 경우에만 작동한다는 것입니다.

    쓰기를 중지하고 새 줄을 쓰기 위해 루프를 다시 시작하기로 결정하면 다시 숫자 "1"로 시작합니다. 이 문제를 어떻게 해결할 수 있으며 왜 발생합니까?


    • 답변 # 1

      코드에 몇 가지 문제가 있습니다. 그래서 나는 당신의 코드를 다시 만들었습니다.

      try:
          with open("file.txt", "r") as l:
              line = int(l.readlines()[-1][0]) + 1
      except FileNotFoundError:
          line = 1
      
      

      이것은 파일을 읽고 존재하지 않으면 1을 사용하는 마지막 번호를 얻으려고 시도합니다.

      with open("file.txt", "a") as f:
          try:
              while True: 
                  f.write(f'{line} {input()} \n')
                  line += 1
          except KeyboardInterrupt:
              print('Quiting...')
      
      

      이것은 귀하의 코드와 동일하지만 오류 메시지를 표시하지 않고 exit (ctrl + c) 방법을 추가합니다.

      따라서 최종 코드는 다음과 같습니다.

      try:
          with open("file.txt", "r") as l:
              line = int(l.readlines()[-1][0]) + 1
      except FileNotFoundError:
          line = 1
      with open("file.txt", "a") as f:
          try:
              while True: 
                  f.write(f'{line} {input()} \n')
                  line += 1
          except KeyboardInterrupt:
              print('Quiting...')
      
      

    • 답변 # 2

      그렇게하는 방법은 파일을 읽고 가장 최근의 줄을 찾아서 그 번호를 얻는 것입니다.

      그런 다음 여기에 1을 더하고 계속 진행합니다.

      추신 정규식이 도움이 될 것입니다

  • 이전 debian - zfs - txg_sync의 빈도를 줄이거 나 방지하는 방법
  • 다음 C ++ 배열 낭비 값 초기화