【问题标题】:Parse unstructured file and store in List Python?解析非结构化文件并存储在 List Python 中?
【发布时间】:2020-07-03 02:57:46
【问题描述】:

当我尝试使用此代码读取文件时,它给了我一个错误,说语法错误。

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”。

有人有什么建议请告诉我。这将非常有帮助。 谢谢。

【问题讨论】:

  • 添加完整的回溯。它说的很多不仅仅是SyntaxError。它将帮助我们帮助您。
  • 我看到一个问题,但它不会给出语法错误。你可能打算“for i, line in enumerate”
  • 消息 语法错误 没有抱怨您正在尝试读取的文件。它在抱怨你的程序。而且我没有收到语法错误,这意味着您发布的代码并不完全是给出您报告的错误的代码。查看消息中的插入符号指向的位置。

标签: python python-3.x text-parsing


【解决方案1】:

假设您正在读取 cwd 中的文件,我将发布 2 个解决方案。

os.path.dirname(__file__) 如果您在 cwd 中执行并且文件在 cwd 中,则返回空,那么代码将起作用,但如果您不在 CWD 中,则可能会产生错误,因为它不会得到正确的文件路径。

Solution : 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:])

【讨论】:

  • 感谢您的代码伙伴。我仍然有同样的语法错误!
  • @user13096834 你在做什么> 你是如何在 cmd 提示符下运行代码的?
  • 您的建议很好,但没有解决语法错误......这就是问题的本质。请尽量只回答问得很好的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
相关资源
最近更新 更多