情况:我需要使用最 Pythonic 的方式找到任何操作系统的顶级 [root] 目录,而不需要系统调用。
问题:虽然我可以使用诸如 之类的东西检查操作系统if "Windows" in platform.system(),但我不能太确定驱动器号是否总是C:\或/(后者不太可能)。我也无法确定是否只有 Windows 和 *NIX 需要编目。
问题:有没有办法获取任何操作系统的顶级目录?最好使用该os模块,因为我已经在使用它了。
我已经阅读了UnicodeDecodeError: 'charmap' codec can't decode byte X in position Y: character maps to <undefined>。虽然错误信息相似,但代码完全不同,因为我os.popen在这个问题中使用了open. 我不能使用其他问题的答案来解决这个问题。
output = os.popen("dir").read()
Run Code Online (Sandbox Code Playgroud)
该行应该将命令“dir”的输出分配给变量“output”,导致此错误:
'charmap' codec can't decode byte 0x88 in position 260: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)
我认为这可能是因为文件夹中的某些文件包含诸如?, ?, ? 和?以他们的名义。我不知道如何解决这个问题。
我正在尝试识别文件夹中具有特定名称的所有文件。我正在使用标准代码来执行此操作,如下所示:
for paths, subdirs, files in os.walk(start_dir, topdown=True):
for file in files:
print(os.path.join(paths, file))
Run Code Online (Sandbox Code Playgroud)
我的问题是关于 Windows 机器中这段代码的输出,基本上路径的动态部分有错误的斜杠符号:
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\AesSheetNumberEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\DocumentReceivedDetailEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\DocumentReceivedEntity.java
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim\aes\DocumentTypeEntity.java
Run Code Online (Sandbox Code Playgroud)
给出的开始文件夹是:
D:/JAJA/Projects/DAF/AIM/WEBAPP/trunk/src/main/java/ie/gov/agriculture/aim
Run Code Online (Sandbox Code Playgroud)
文件夹分隔符是 unix one:"/"
而 os.walk 函数找到的所有后续子文件夹都带有 Windows 斜杠:"\"
所以最后我有无效的路径,不能立即使用。这是 python os 库中的错误还是实际上的错误?
目前我可以轻松地用正确的分隔符替换错误的分隔符,但我想知道这是否是唯一的方法?
我有以下代码(为简洁起见而简化):
import os
import errno
import imp
lib_dir = os.path.expanduser('~/.brian/cython_extensions')
module_name = '_cython_magic_5'
module_path = os.path.join(lib_dir, module_name + '.so')
code = 'some code'
have_module = os.path.isfile(module_path)
if not have_module:
pyx_file = os.path.join(lib_dir, module_name + '.pyx')
# THIS IS WHERE EACH PROCESS TRIES TO WRITE TO THE FILE. THE CODE HERE
# PREVENTS A RACE CONDITION.
try:
fd = os.open(pyx_file, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
except OSError as e:
if e.errno == errno.EEXIST:
pass
else:
raise
else:
os.fdopen(fd, 'w').write(code)
# THIS …Run Code Online (Sandbox Code Playgroud) 我将数千个时间序列.csv存储在网络驱动器上的文件中。在更新文件之前,我首先获取文件的最后一行以查看时间戳,然后在该时间戳之后使用数据进行更新。如何才能.csv通过网络驱动器快速获取文件的最后一行,从而不必.csv仅使用最后一行就加载整个大文件?
jupyter笔记本是否有可能获得自己的文件名,类似于我们从python脚本执行的操作吗?
os.path.basename(__file__) 似乎不起作用,至少对于jupyterlab上的我来说
sys.argv[0] 退货 my_home/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py
该文件的os模块作出如下声明:
笔记
在实际使用 open() 之前,使用 access() 来检查用户是否被授权例如打开文件会创建一个安全漏洞,因为用户可能会利用检查和打开文件之间的短时间间隔来操纵它。最好使用EAFP技术。例如:
if os.access("myfile", os.R_OK):
with open("myfile") as fp:
return fp.read()
return "some default data"`
Run Code Online (Sandbox Code Playgroud)
最好写成:
try:
fp = open("myfile")
except PermissionError:
return "some default data"
else:
with fp:
return fp.read()
Run Code Online (Sandbox Code Playgroud)
我不明白用户如何“利用”这个间隔。如果open要引发异常,我不确定如何os.access防止引发该异常。同样,如果用户以某种方式操作文件,为什么不在 EAFP 版本的open命令之前执行文件操作?
我确实理解第二个版本可能更健壮,因为os.access可能无法正确识别可能引发 a 的条件PermissionError,但我不明白LBYL版本的安全性如何。有人可以解释一下吗?
根据Python 文档,os.startfile需要两个参数:path和operation。Path 描述得相当好且不言自明,但是对于operation,所要说的是:
当给出另一个操作[(not
'open')] 时,它必须是一个“命令动词”,指定应该对文件做什么。Microsoft 记录的常用动词是'print'and'edit'(用于文件)以及'explore'和'find'(用于目录)。
这意味着存在其他命令动词。还有其他可用的命令动词吗?如果是这样,它们是什么以及它们做什么?
具体来说,我想知道与“打开文件位置”操作相关的命令动词。
我正在使用 glob 通过这行代码列出主目录中的所有 python 文件。我也想找到所有 .json 文件和 py 文件,但我找不到任何可以在一行代码中扫描多种文件类型的文件。
for file in glob.glob('/home/mohan/**/*.py', recursive=True):
print(file)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 os 模块验证作为用户输入接收的目录是否存在
这就是我接受输入的方式:
directory = input("Hi ! \n please type a directory, thanks !")
Run Code Online (Sandbox Code Playgroud)
这个想法是我想确保用户将输入一个现有的目录而不是别的
python ×10
python-os ×10
python-3.x ×3
windows ×3
cmd ×1
csv ×1
directory ×1
file-access ×1
filepath ×1
glob ×1
input ×1
io ×1
jupyter-lab ×1
pandas ×1
python-2.7 ×1
validation ×1