仅在循环目录时删除$redline = new Imagick();
$redline->newPseudoImage(1100,3,'xc:'.$chipColourPixel->getColorAsString());
$grad = new Imagick();
$grad->newPseudoImage(3, 900, 'gradient:black-white');
$grad->rotateImage('white', 90);
$grad->solarizeImage((int)ceil(50*Imagick::QUANTUM_RANGE/100));
$grad->levelImage(0,1,50*Imagick::QUANTUM_RANGE/100);
$redline->compositeImage($grad, Imagick::COMPOSITE_COPYOPACITY, 0, 0);
$redline->writeImage("redline.png");
个文件-返回一条消息,指示系统找不到指定的文件:“ File.txt”。
我已确保要删除的txt
文件在我循环的目录中。我还检查了我的代码,并使用print命令将它们打印在列表中,以确保它可以看到我的文件。
txt
在最初执行时,我希望看到除其他非txt文件以外的所有txt文件都已删除。实际结果是一条错误消息import os
fileLoc = 'c:\\temp\\files'
for files in os.listdir(fileLoc):
if files.endswith('.txt'):
os.unlink(files)
不确定我在做什么错,任何帮助将不胜感激。
答案 0 :(得分:0)
找不到该位置,因为您打算unlink
的路径是相对于fileLoc
的。实际上,对于您的代码,其效果是相对于当前工作目录unlink
。如果有*.txt
个文件
在cwd中,代码会产生不幸的副作用。
另一种查看方式:
本质上,以此类推,您要在外壳中执行的操作基本上等效于此:
# first the setup
$ mkdir foo
$ touch foo/a.txt
# now your code is equvalent to:
$ rm *.txt
# won't work as intended because it removes the *.txt files in the
# current directory. In fact the bug is also that your code would unlink
# any *.txt files in the current working directory unintentionally.
# what you intended was:
$ rm foo/*.txt
缺少的部分是所讨论文件的路径。
我将添加一些社论:老吟游诗人教我们“有疑问时打印变量”。换句话说,调试它。我没有从OP中看到尝试这样做的尝试。只是要记住的一件事。
无论如何,新代码:
修订:
import os
fileLoc = 'c:\\temp\\files'
for file in os.listdir(fileLoc):
if file.endswith('.txt'):
os.unlink(os.path.join(fileLoc,file))
解决方法:os.path.join()
从各个方面为您构建了一条道路。其中一部分是文件所在的目录(路径),也称为fileLoc
。另一部分是文件名,也称为file
。
os.path.join()
使用适合您平台的操作系统目录分隔符从它们创建一条完整的有效路径。
此外,可能要浏览一下: