免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 19069 | 回复: 9

简单问题:如何用python的循环提取shell 命令下的ls文件 [复制链接]

论坛徽章:
0
发表于 2019-09-24 10:04 |显示全部楼层
大家好,
简单问题:现需要一个python脚本,把ls *py* 下列出的所有py脚本复制到另外一个位置,

[root@localhost ~]# ls *py*
assert.py  create_dir_debug.py  create_dir.py  get_logs_for_date.py  input.py  loop.py  os.py  raw_input.py  readlines.py  usb_v2.py

请问脚本应该怎么写? 我只会写到这,

import os
a = os.system('ls *py*')

试了readlines和for循环和元组,都不会写,请指教

论坛徽章:
0
发表于 2019-09-24 10:49 |显示全部楼层
写了如下的python,但是不对,运行后检查了/root/test/下的文件,并没有copy成功

import os
a = os.system('ls *py*')
for i in range(a):
        cmd = 'cp i /root/test/.'
        os.system (cmd)

论坛徽章:
0
发表于 2019-09-24 16:23 |显示全部楼层
现在的问题是,如何把ls *py* 写入到元组或者列表里? 我猜想的是,写入列表后就能用for循环依次copy了

[root@localhost ~]# ls *py*
assert.py  create_dir_debug.py  create_dir.py  get_logs_for_date.py  input.py  loop.py  os.py  raw_input.py  readlines.py  usb_v2.py

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-09-24 16:57 |显示全部楼层
这个为什么要用python.
shell 直接cp 不就完事了吗?
  1. cp *.py newdir
复制代码

论坛徽章:
0
发表于 2019-09-25 09:52 |显示全部楼层
回复 4# cfwyy

不是为了学习python嘛,大神,应该怎么写呀?

论坛徽章:
0
发表于 2019-09-26 11:06 |显示全部楼层
import shutil

# 将文件内容拷贝到另一个文件中
shutil.copyfileobj(open('old.txt', 'r'), open('new.txt', 'w'))

# 拷贝文件
shutil.copyfile('old.txt', 'old1.txt')

# 仅拷贝权限。内容、组、用户均不变
shutil.copymode('old.txt', 'old1.txt')

# 复制权限、最后访问时间、最后修改时间
shutil.copystat('old.txt', 'old1.txt')

# 复制一个文件到一个文件或一个目录
shutil.copy('old.txt', 'old2.txt')

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-10-08 13:38 |显示全部楼层
本帖最后由 cfwyy 于 2019-10-08 13:41 编辑

就这个需求来说python肯定不适合的,这是shell就可以干的事。我觉得一定要用python写当然也是可以的。只不过就不要用os.system来直接调用了shell命令了,否则我
  1. os.system("cp *.py newdir")
复制代码

那还不是一样?
可以用python的标准库来写,这样也能跨平台。
仅供参考:
  1. import os
  2. import shutil
  3. newDir="./temp"
  4. pyfiles=[f for f in os.listdir() if f.endswith("py") and os.path.isfile(f)]
  5. for file in pyfiles:
  6.     shutil.copy(file,newDir)
复制代码

论坛徽章:
0
发表于 2019-12-28 22:13 |显示全部楼层
回复 7# cfwyy

大神,总是提示缩进错误,  shutil.copy用缩进吗 ?
>>> import os
>>> import shutil
>>> ewDir="./tmp"
>>> print (ewDir)
./tmp
>>> pyfiles=[f for f in os.listdir('/root') if f.endswith("py") and os.path.isfile(f)]
>>> print(pyfiles)
['loop.py', 'create_dir_debug.py', 'python_cp.py', 'create_dir.py', 'assert.py', 'usb_v2.py', 'os.py', 'input.py', 'raw_input.py', 'readlines.py', 'get_logs_for_date.py']
>>> for file in pyfiles:
... shutil.copy(file,newDir)
  File "<stdin>", line 2
    shutil.copy(file,newDir)
         ^
IndentationError: expected an indented block


另外我把上述代码写入了脚本,脚本没有报任何错误,但就是copy结果失败,
cat python_cp.py:
import os
import shutil
newDir="./tmp"
pyfiles=[f for f in os.listdir('/root') if f.endswith("py") and os.path.isfile(f)]
for file in pyfiles:
    shutil.copy(file,newDir)


运行结果:
[root@localhost ~]# python python_cp.py
[root@localhost ~]#


确认没copy过去
[root@localhost tmp]# ll *py*
ls: cannot access *py*: No such file or directory
[root@localhost tmp]# pwd
/tmp



论坛徽章:
0
发表于 2019-12-28 22:22 |显示全部楼层
回复 7# cfwyy

我又试了下调整缩进:这下不报缩进错误了,但是怎么结束啊? 下面又出现了...

>>> for file in pyfiles:
...     shutil.copy(file,newDir)
...

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
发表于 2019-12-29 08:24 |显示全部楼层
回复 8# Bear_Warrior

缩进问题是python最最最基本的,不应该问别人,你自己试两次就知道了。我脚本中目标目录是 ./tmp     不是/tmp
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP