使用Pycharm和Windows 10的路径和权限问题

时间:2016-04-13 12:53:08

标签: python pandas windows-10 pycharm

问题

我在Windows 10中使用Pycharm获取权限错误和代码不一致。我可以在Windows 10桌面上使用这段代码,但它在我的Surface 4上不起作用:

xlsx = pd.ExcelFile('\test\Participant01Master.xlsx')

请注意文件夹和文件位于我的PyCharm IDE项目中。我正在使用上面给出的代码的熊猫。但是,给我的错误是:

FileNotFoundError: [Errno 2] No such file or directory: '/test/Participant01Master.xlsx'

我想我的xlrd依赖可能有点时髦。所以,我尝试卸载xlrd包(重新安装),我得到以下内容:enter image description here

尝试解决方案

我可以成功使用代码df = pd.read_excel(open('C:\\Users\hlyates\Source\Repos\Project0\Data\Participant01Master.xlsx','rb'))来读取我的文件。但是,这感觉很糟糕,因为我的xlxs代码行适用于一台机器而不适用于另一台机器?

至于路径,我验证了PyCharm在管理员组中,并且我的用户配置文件具有相同的权限和特殊访问权限。

摘要

这真的杀死了我对Windows生态系统的热情?我不觉得PyCharm在我的Windows 10盒子上按预期工作。当我和管理员组已经拥有对此权限的权限时,我不应该在PyCharm管理员(这似乎可以解决一些奇怪的文件权限问题)时右键单击并“以管理员身份运行”。我还认为代码适用于我桌面上的IDE,但不适用于Surface 4,这很奇怪。我不会像使用这些东西那样对抗Linux。我只分享这两个问题,因为我觉得它们可能有关系吗?如果我做了一些愚蠢的事情,无论如何都要指出这一点,我会纠正它,但我能用我提供的信息做到最好。谢谢你的耐心。 :)

参考文献

我正在使用代码here进行测试。

3 个答案:

答案 0 :(得分:2)

你应该只安装Python而不是'#Program Files'文件夹,尝试' C:\ Python \ python35-32 \'一切都会好的。如果您想了解更多详情,请查看this主题。

关于Windows 10的炒作太多了,实际上并没有什么特别之处。

答案 1 :(得分:0)

可能发生的一个问题是文件分隔符的问题。看起来您在路径名中使用反斜杠。 Python对待' \'作为逃避角色。要规范化文件路径(独立于OS),请使用os.path.normpath将斜杠转换为当前操作系统使用的文件分隔符:

xlsx = pd.ExcelFile(os.path.normpath('\test\Participant01Master.xlsx'))

替代方案可以使用os.sep代替斜杠。这将使用正在运行的OS python的正确文件分隔符:

xlsx = pd.ExcelFile('{0}test{0}Participant01Master.xlsx'.format(os.sep))

参考文献: os path docs:https://docs.python.org/2/library/os.path.html#os.path.normpath

os sep doc:https://docs.python.org/2/library/os.html#os.sep

关于python文件路径的博客:https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/

答案 2 :(得分:0)

我在Windows 10中使用pycharm 在我使用下一个系统的任何系统中查找文件:

from os.path import expanduser, join, dirname, abspath
home = expanduser("~")  # this is the path to the home folder of the current user
curdir = dirname(abspath(__file__))  # This one returns the path to the file that is running
filepath = join (curdir, 'filename.txt')  # This one joins the path of my current directory to a file name (or any other path) independent of the system

我已经测试了这个,可以在Linux和Windows中使用