【问题标题】:Reading CSV files without providing directory path does not work在不提供目录路径的情况下读取 CSV 文件不起作用
【发布时间】:2018-07-22 10:57:49
【问题描述】:
def readcsv(myfile):
    myfile_o = open(myfile, "rU")
    reader = csv.reader(myfile_o, delimiter=",")

def csvmain():
    readcsv('/Users/madrad/Dnl/Hei/demand.csv')

csvmain()

为什么我需要指定传递给函数的 csv 文件的完整路径?当我在终端中手动执行相同的代码时,不需要该路径。但是,当代码作为 exe 文件运行(使用 pyinstaller 编译)时,如果没有完整路径,它将无法工作。 即使我将 csv 文件放在 exe 文件的同一目录中,它也找不到文件并且程序终止。 我需要以编程方式传递路径,但我不知道如何。如有任何建议,我将不胜感激。

【问题讨论】:

    标签: python-3.x csv path pyinstaller reader


    【解决方案1】:

    可以使用os包进行规范化,获取文件的绝对路径。

    import os
    
    def readcsv(myfile):
        myfile_o = open(myfile, "rU")
        reader = csv.reader(myfile_o, delimiter=",")
    
    def csvmain():
        readcsv(os.path.normpath(os.path.realpath('/Users/madrad/Dnl/Hei/demand.csv')))
    
    csvmain()
    

    我认为有了这样的东西,它应该可以工作。我这样做是为了在不同的路径和操作系统中获取配置文件。

    【讨论】:

    • 谢谢。但是我想知道为什么简单的 readcsv('demand.csv') 不起作用。 CSV 与我的 py 或 exe 文件位于同一路径中。
    • 为什么?很简单,因为路径不正确。当你执行一个 python 文件时,它的路径并不总是变成执行路径。
    • 好的。我明白你的意思。你是绝对正确的。但是当我分发编译版本时,用户将 csv 存储在哪里。该路径可能因用户而异。此外,当readcsv('demand.csv') 在终端手动运行时运行良好,为什么编译的exe 无法找到csv?
    • 谢谢,Tzomas。我在没有路径的情况下使用您的想法 readcsv(os.path.normpath(os.path.realpath('demand.csv'))) 解决了它。当执行文件运行时,它会在用户根目录中查找 csv 文件。我的问题解决了。我可以要求我的用户将 csv 文件放在他们的根目录中。谢谢大家。
    猜你喜欢
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 2021-03-02
    • 2018-04-18
    • 2010-10-26
    • 2013-06-28
    相关资源
    最近更新 更多