我正在使用python从我的linux操作系统中读取2个文件。一个包含一个条目/数字' DATE':
20111125
另一个文件包含许多条目,' TIME':
042844UTC 044601UTC ... 044601UTC
我能够读取要分配给适当变量的文件。我想使用变量来创建文件夹路径,移动文件等...例如:
$PATH/20111125/042844UTC $PATH/20111125/044601UTC $PATH/20111125/044601UTC
等等。
不知何故,这不能同时处理多个变量:
import subprocess, sys, os, os.path
DATEFILE = open('/Astronomy/Sorted/2-Scratch/MAPninox-DATE.txt', "r")
TIMEFILE = open('/Astronomy/Sorted/2-Scratch/MAPninox-TIME.txt', "r")
for DATE in DATEFILE:
print DATE,
for TIME in TIMEFILE:
os.popen('mkdir -p /Astronomy/' + DATE + '/' TIME) # this line works for DATE only
os.popen('mkdir -p /Astronomy/20111126/' + TIME) # this line works for TIME only
subprocess.call(['mkdir', '-p', '/Astronomy/', DATE]), #THIS LINE DOESN'T WORK
谢谢!
答案 0 :(得分:2)
我建议使用os.makedirs
(与mkdir -p
完全相同)而不是subprocess
或popen
:
import sys
import os
DATEFILE = open(os.path.join(r'/Astronomy', 'Sorted', '2-Scratch', 'MAPninox-DATE.txt'), "r")
TIMEFILE = open(os.path.join(r'/Astronomy', 'Sorted', '2-Scratch', 'MAPninox-TIME.txt'), "r")
for DATE in DATEFILE:
print DATE,
for TIME in TIMEFILE:
os.makedirs(os.path.join(r'/Astronomy', DATE, TIME))
astrDir = os.path.join(r'/Astronomy', '20111126', TIME)
try
os.makedirs(astrDir)
except os.error:
print "Dir %s already exists, moving on..." % astrDir
# etc...
然后使用shutil
进行任何cp
/ mv
/ etc操作。
来自os
Docs:
<强>
os.makedirs(path[, mode])
强>
递归目录创建功能。像mkdir()
一样,但是全部都是如此 包含叶子目录所需的中级目录。 如果leaf目录已存在,则引发错误异常 无法创建。默认模式为0777(八进制)。在某些系统上, 模式被忽略。在使用它的地方,首先是当前的umask值 掩盖了。
答案 1 :(得分:1)
我在你的代码中看到了一些错误。
os.popen('mkdir -p /Astronomy/' + DATE + '/' TIME) # this line works for DATE only
这是语法错误。我认为你的意思是'/' + TIME
,而不是'/' TIME
。我不确定你的意思是“这条线仅适用于DATE”?
subprocess.call(['mkdir', '-p', '/Astronomy/', DATE]), #THIS LINE DOESN'T WORK
您希望打电话给什么命令?我猜你正在尝试执行mkdir -p /Astronomy/<<DATE>>
的其余代码。这不是你编码的。传递给subprocess.call
的列表中的每个项目都是单独的参数,因此您编写的内容为mkdir -p /Astronomy <<DATE>>
。这将尝试创建两个目录,一个根级目录/Astronomy
,以及当前工作目录中另一个名为DATE
的目录。
如果我对你想做的事情是正确的,那么更正后的行将是:
subprocess.call(['mkdir', '-p', '/Astronomy/' + DATE])
在我看来,使用os.makedirs
(并使用os.path.join
来拼接路径而不是字符串+)的chown答案是一种更好的通用方法。但就我所知,这就是你当前代码无效的原因。