Разобрать неструктурированный файл и сохранить в списке Python? - PullRequest
0 голосов
/ 22 марта 2020

Когда я пытаюсь прочитать файл с помощью этого кода, выдается ошибка «Синтаксическая ошибка».

import os
import sys
def main(argv):
    bada_file = os.path.join(os.path.dirname(__file__),argv[0],argv[1],)
    print(os.path.abspath(__file__))
    print(os.path.abspath(bada_file))  
    data_list = list()
    with open(bada_file, "r+") as read_file:
        # (1, "first test"), (2, "next_line") ...
        for line in enumerate(read_file.readlines()):
            print(line)    
    for data in data_list:
        print(data)

if __name__ == "__main__":
    main(sys.argv[1:])

Файл, который я пытаюсь прочитать, - ".OPF".

Если у кого-нибудь есть предложения, пожалуйста, дайте мне знать. Это будет действительно полезно. Спасибо вам.

1 Ответ

0 голосов
/ 22 марта 2020

Предполагая, что вы читаете файл в cwd, я публикую 2 решения.

os.path.dirname(__file__) верните пустое значение, если вы выполняете в cwd и если файл находится в cwd, тогда код будет работать, но если вы не в CWD, то это может привести к ошибке, так как не будет получен правильный путь к файлу.

Решение : os.path.dirname(os.path.abspath(__file__))

Вот решение.

import os
import sys
def main(argv):

    bada_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),argv[0])

    print(os.path.abspath(__file__))
    print(os.path.dirname(os.path.abspath(__file__)))

    data_list = list()
    with open(bada_file, "r+") as read_file:
       # (1, "first test"), (2, "next_line") ...
       for line in enumerate(read_file.readlines()):
           print(line)    
       for data in data_list:
           print(data)

if __name__ == "__main__":
   main(sys.argv[1:])

Еще одно более простое решение (с использованием os.getcwd ())

import os
import sys

def main(argv):

    for file in argv:

        bada_file = os.path.join(os.getcwd(),file)

        print(bada_file)

        #print(os.path.abspath(__file__))
        #print(os.path.abspath(bada_file))


        with open(bada_file, "r+") as read_file:
            # (1, "first test"), (2, "next_line") ...
            for line in enumerate(read_file.readlines()):
                print(line)    

if __name__ == "__main__":
    main(sys.argv[1:])
...