我想知道是否可以在python3中强制os.walk按字母顺序访问目录.例如,这是一个目录和一些将遍历此目录的代码:
ryan:~/bktest$ ls -1 sample
CD01
CD02
CD03
CD04
CD05
--------
def main_work_subdirs(gl):
for root, dirs, files in os.walk(gl['pwd']):
if root == gl['pwd']:
for d2i in dirs:
print(d2i)
Run Code Online (Sandbox Code Playgroud)
当python代码点击上面的目录时,输出如下:
ryan:~/bktest$ ~/test.py sample
CD03
CD01
CD05
CD02
CD04
Run Code Online (Sandbox Code Playgroud)
我想强迫步行按字母顺序访问这些目录01, 02 ... 05
.在python3 doc中os.walk
,它说:
当topdown为True时,调用者可以就地修改dirnames列表(可能使用del或slice赋值),而walk()只会递归到名称保留在dirnames中的子目录中; 这可以用来修剪搜索,强加一个特定的访问顺序
这是否意味着我可以强加一个按字母顺序排列的访问顺序os.walk
?如果是这样,怎么样?
我是sed的新手,需要从输出中获取文件名find
.我需要找到输出我的脚本的另一部分的整个路径,但我想只打印没有路径的文件名.我还需要从行的开头开始匹配,而不是从结尾开始.在英语中,我想匹配,第一组以".txt"结尾的字符不包含"/".这是我的尝试不起作用:
ryan@fizz:~$ find /home/ryan/Desktop/test/ -type f -name \*.txt
/home/ryan/Desktop/test/two.txt
/home/ryan/Desktop/test/one.txt
ryan@fizz:~$ find /home/ryan/Desktop/test/ -type f -name \*.txt | sed s:^.*/[^*.txt]::g
esktop/test/two.txt
ne.txt
Run Code Online (Sandbox Code Playgroud)
这是我想要的输出:
two.txt
one.txt
Run Code Online (Sandbox Code Playgroud)
好的,所以提供的解决方案回答了我原来的问题,但我想我错了.我不想杀死我正在搜索的文件后缀的其余部分.所以,更清楚的是,如果如下:
bash$ new_mp3s=\`find mp3Dir -type f -name \*.mp3\` && cp -rfv $new_mp3s dest
`/mp3Dir/one.mp3' -> `/dest/one.mp3'
`/mp3Dir/two.mp3' -> `/dest/two.mp3'
Run Code Online (Sandbox Code Playgroud)
我想要的是:
bash$ new_mp3s=\`find mp3Dir -type f -name \*.mp3\` && cp -rfv $new_mp3s dest | sed ???
`one.mp3' -> `/dest'
`two.mp3' -> `/dest'
Run Code Online (Sandbox Code Playgroud)
对困惑感到抱歉.我原来的问题刚刚涵盖了我想要做的第一部分.
第二次编辑:这是我想出的:
DEST=/tmp && cp -rfv `find /mp3Dir -type f …
Run Code Online (Sandbox Code Playgroud) 我的表中的$ 1列只是一个i ++值,1,2,3 ...... n其中n是第2和第3个hline之间的行数.是否有一个函数我可以调用告诉我在我的表的那一部分有多少行,或者,如果我想能够引用一个变量,即我表中的行数,我是否必须跟踪它像这样手动吗?所以我想要做的是以下,而不必使用计数列.
@7$1 = Total(5), where "5" is the number of rows between the 2nd and 3rd hline
| num rows | x | y |
|----------+---+---|
| 1 | | |
| 2 | | |
| 3 | | |
| 4 | | |
| 5 | | |
|----------+---+---|
| Total(5) | | |
|----------+---+---|
#+TBLFM: @7$1=Total(@-1)
Run Code Online (Sandbox Code Playgroud)
所以这就是我现在所拥有的,我希望能够获得2个小时之间的行数,而不必使用专用列来保持计数.
所以,我正在尝试通过做一些项目的euler问题来学习ruby,而且我遇到了一些我无法解释的事情和逗号?运算符?是在两者的中间.我一直无法找到这方面的好文档,也许我只是不按照我应该使用谷歌,但好的ruby文档似乎有点稀疏...
1:您如何描述这是如何工作的?第一个片段是我不理解的ruby代码,第二个是我编写的代码,只有在精心跟踪第一个代码后才会执行相同的操作:
#what is this doing?
cur, nxt = nxt, cur + nxt
#this, apparently, but how to describe the above?
nxt = cur + nxt
cur = nxt - cur
Run Code Online (Sandbox Code Playgroud)
2:在下面的例子中,你如何描述'step'行正在做什么?从我可以收集的内容来看,step命令的工作方式类似于(range).step(step_size),但这似乎在做(starting_point).step(ending_point,step_size).我对这个假设是对的吗?我在哪里可以找到这方面的优秀文件?
#/usr/share/doc/ruby1.9.1-examples/examples/sieve.rb
# sieve of Eratosthenes
max = Integer(ARGV.shift || 100)
sieve = []
for i in 2 .. max
sieve[i] = i
end
for i in 2 .. Math.sqrt(max)
next unless sieve[i]
(i*i).step(max, i) do |j|
sieve[j] = nil
end
end
puts sieve.compact.join(", ")
Run Code Online (Sandbox Code Playgroud)