我需要在Python的切片表示法上有一个很好的解释(引用是一个加号).
对我来说,这种符号需要一点点提升.
它看起来非常强大,但我还没有完全了解它.
Perl有一个名为find2perl的可爱小实用工具,它将(非常忠实地)将Unix find实用程序的命令行转换为Perl脚本来执行相同操作.
如果您有这样的find命令:
find /usr -xdev -type d -name '*share'
^^^^^^^^^^^^ => name with shell expansion of '*share'
^^^^ => Directory (not a file)
^^^ => Do not go to external file systems
^^^ => the /usr directory (could be multiple directories
Run Code Online (Sandbox Code Playgroud)
它找到share以下结尾的所有目录/usr
现在运行find2perl /usr -xdev -type d -name '*share'它会发出一个Perl脚本来做同样的事情.然后,您可以修改脚本以供您使用.
Python os.walk()当然具有所需的功能,递归目录列表,但存在很大差异.
以简单的find . -type f -print方式查找并打印当前目录下的所有文件.一个天真的实现使用os.walk()将是:
for path, dirs, files in os.walk(root):
if files: …Run Code Online (Sandbox Code Playgroud) 我想忽略我的os.walk()中的一些目录.
我做:
folders_to_ignore = ['C:\\Users\\me\\AppData\\'];
def find_files(directory, pattern):
for root, dirs, files in os.walk(directory):
dir[:] = [d for d in dirs if not is_folder_to_ignore(d)];
for basename in files:
if fnmatch.fnmatch(basename, pattern):
filename = os.path.join(root, basename)
print("filename=" + filename);
Run Code Online (Sandbox Code Playgroud)
我明白了:
File "C:\Users\me\workspaces\pythonWS\FileUtils\findfiles.py", line 29, in find_files
dir[:] = [d for d in dirs if not is_folder_to_ignore(d)];
Run Code Online (Sandbox Code Playgroud)
TypeError:'builtin_function_or_method'对象不支持项目分配
有任何想法吗?
谢谢.
我知道这对你们中的许多人来说将是一件令人沮丧的事情。我刚刚开始学习Python,并需要一些基本文件处理方面的帮助。
我拍摄了很多屏幕快照,这些屏幕快照最终出现在桌面上(因为这是默认设置)。我知道我可以更改屏幕快照设置以自动将其保存在其他位置。但是,我认为该程序将是教我如何对文件进行排序的好方法。我想使用python自动排序桌面上的所有文件,识别以.png结尾的文件(屏幕快照的默认文件类型),然后将其移动到我名为“ Archive”的文件夹中。
到目前为止,这是我得到的:
import os
import shutil
source = os.listdir('/Users/kevinconnell/Desktop/Test_Folder/')
destination = 'Archive'
for files in source:
if files.endswith('.png'):
shutil.move(source, destination)
Run Code Online (Sandbox Code Playgroud)
我已经玩了很多,但没有用。在此最新版本中,运行程序时遇到以下错误:
追溯(最近一次通话最近):在shutil.move(源,目标)中的文件“ pngmove_2.0.py”,第23行,文件“ /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2”。 7 / shutil.py“,行290,在移动TypeError:强制转换为Unicode:需要字符串或缓冲区,找到列表
我的印象是我对源和目标所必需的正确约定/语法有某种疑问。但是,到目前为止,我仍然无法找到有关如何修复它的帮助。我使用os.path.abspath()来确定您在上面看到的文件路径。
在此先感谢您为保持我的理智提供的任何帮助。
我相信我已经非常接近这个问题了。我敢肯定,如果我继续玩下去,我会解决的。以便一直在帮助我的每个人都得到更新...
这是我正在使用的当前代码:
import os
import shutil
sourcepath ='/Users/kevinconnell/Desktop/'
source = os.listdir(sourcepath)
destinationpath = '/Users/kevinconnell/Desktop/'
for files in source:
if files.endswith('.png'):
shutil.move(os.path.join(sourcepath,'Test_Folder'), os.path.join(destinationpath,'Archive'))
Run Code Online (Sandbox Code Playgroud)
这可以将我的“ Test_Folder”文件夹重命名为“ Archive”。但是,它将移动文件夹中的所有文件,而不是移动以'.png'结尾的文件。
所以我有一个文件系统,我希望能够使用python检查和更新.我的解决方案是os.walk但是我的需求和我的文件系统会出现问题.这是目录的布局方式:
Root
dir1
subdir
1
2
3...
file1
file2
dir2
subdir
1
2
3...
file1
file2
...
Run Code Online (Sandbox Code Playgroud)
主目录有不同的名称,因此"dir1"和"dir2"但其中的目录具有相同的名称,并包含许多不同的文件和目录.子目录是我想从os.walk中排除的,因为它们添加了不必要的计算.
有没有办法根据目录的名称而不是路径从os.walk中排除目录,还是我需要做其他事情?