我有一个脚本B.py
,是从另一个脚本导入的,例如A.py
如果我在A中导入B,__file__
魔法常量已将其路径中的一些大写字母转换为小写。
如果我直接运行B文件,则__file__
常量与路径有关。
简而言之,这就是发生的事情。以下内容:
telplugins_path = os.path.dirname(os.path.realpath(__file__))
给我一条这样的路径
C:\\Python\\lib\\site_packages\\mypackage
什么时候应该
C:\\Python\\Lib\\site_packages\\mypackage
观察'Lib'的变化 - > 'LIB'
任何人都知道如何通过适当的案例获取__file__
的路径?在Windows上运行它。
答案 0 :(得分:3)
Windows文件系统不区分大小写。
Python只是在C:\Python\lib\site_packages
搜索列表中配置了sys.path
路径,因此当您导入模块时,python会使用小写版本构建文件路径。
这不是问题。 Windows将继续使用小写版本的路径加载文件。
答案 1 :(得分:1)
在Windows上,win32模块包含函数GetLongPathName。它解决了上述问题。
也就是说,下面给出了一个正确大小的路径:
aFile = win32api.GetLongPathName(__file__)
pathWithCorrectCase = os.path.split(aFile)[0]
但是,我想避免使用win32模块,因为它看起来并非完全“标准”。
答案 2 :(得分:0)
通过标准库产量:
import {Component, View} from 'angular2/core';
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';
import {UserStatus} from './types/types.ts'; // better to write here for type checking etc.....
@Component({
selector: 'app-service'
})
export class appService {
headers: Headers;
requestoptions: RequestOptions;
res: Response;
student_category_array: Array<UserStatus> = [];
constructor(private http: Http) { }
getUserStatus(url) {
this.headers = new Headers();
this.headers.append("Content-Type", 'application/json');
this.headers.append("Authorization", 'id_token or some thing else....')
this.requestoptions = new RequestOptions({
method: RequestMethod.Get,
url: url,
headers: this.headers
})
return this.http.request(new Request(this.requestoptions(url)))
.map(res => {
// DO YOUR STUFF HERE whihc you want to return to component or
return [{status: res.status, json: res.json()}]
})
}
}
答案 3 :(得分:0)
您可以在窗口上进行某些调用,这些调用会因套管不正确而失败。还有像我这样的场景,这些调用被发送到一个区分大小写的机器。
无论情况如何,如果您需要在窗户上使用合适的外壳,这是我找到的最佳解决方案。
对于单个文件,它对listdir很容易,但是如果你有一个你不是正面的目录路径就是正确的:
import win32com.client as com
_dir = <your path>
fso = com.Dispat("Scripting.FileSystemObject")
folder = fso.GetFolder(_dir)
path = folder.path
这将返回正确的路径。