使用下面给定的python脚本,我试图复制一个文本文件,并尝试创建同一文件的10个副本,如下所示:
logs1.txt
logs2.txt
.
.
logs10.txt
基本上,我只需要增加目标文本文件名中存在的数字即可。
我尝试通过范围命令使用“ for循环”。但是我不知道如何在cp命令中增加数字。
#/usr/bin/env python
import subprocess
class RunCmd(object):
def cmd_run(self, cmd):
self.cmd = cmd
subprocess.call(self.cmd, shell=True)
a = RunCmd()
a.cmd_run('cp /sh/awlog/Logs_new_1.txt /sh/logs/logs1.txt')
答案 0 :(得分:4)
应该很简单
import shutil
for i in range(10):
shutil.copyfile('/path/to/source/file','/destination/path/logs'+str(i+1)+'.txt')
不需要创建一个类来执行这种简单的功能。另外,可以直接使用shutil
模块来复制文件,而无需创建子进程来完成复制。
有关shutil
的更多信息:How do I copy a file in Python?
编辑:
根据Bruno的建议的备用代码:
import shutil
for i in range(1,11):
shutil.copyfile('/path/to/source/file','/destination/path/logs{}.txt'.format(i))
答案 1 :(得分:4)
shutil模块对文件和文件集合提供了许多高级操作。特别是,提供了支持文件复制和删除的功能。
import shutil
for i in range(10):
shutil.copyfile(
"/sh/awlog/Logs_new_1.txt",
"/sh/logs/logs{}.txt".format(i+1)
)
答案 2 :(得分:2)
由于a.cmd_run
命令参数包含一个字符串,因此您只需在while循环中更改此字符串即可。
i = 1
while i < 11:
string = 'cp /sh/ec_rawlog/Logs_new_1.txt /sh/logs/logs%s.txt' % i
a = RunCmd()
a.cmd_run(string)
i += 1
答案 3 :(得分:1)
您应该使用string formatting
templ = 'cp /sh/ec_rawlog/Logs_new_{0}.txt /sh/logs/logs{0}.txt'
for num in range(1,11):
print(templ.format(num))
输出
cp /sh/ec_rawlog/Logs_new_1.txt /sh/logs/logs1.txt
cp /sh/ec_rawlog/Logs_new_2.txt /sh/logs/logs2.txt
cp /sh/ec_rawlog/Logs_new_3.txt /sh/logs/logs3.txt
cp /sh/ec_rawlog/Logs_new_4.txt /sh/logs/logs4.txt
cp /sh/ec_rawlog/Logs_new_5.txt /sh/logs/logs5.txt
cp /sh/ec_rawlog/Logs_new_6.txt /sh/logs/logs6.txt
cp /sh/ec_rawlog/Logs_new_7.txt /sh/logs/logs7.txt
cp /sh/ec_rawlog/Logs_new_8.txt /sh/logs/logs8.txt
cp /sh/ec_rawlog/Logs_new_9.txt /sh/logs/logs9.txt
cp /sh/ec_rawlog/Logs_new_10.txt /sh/logs/logs10.txt
答案 4 :(得分:0)
其他答案很好,但是您也可以使用老式的方法:
# Open main file
with open("/sh/awlog/Logs_new_1.txt") as f_in:
# Read in text
file_str = f_in.read()
# Iterate 1 - 10
for i in range(1, 11):
# Open new file to write to with number
with open("/sh/logs/logs%d.txt" % i, mode="w") as f_out:
f_out.write(file_str)
您可以简单地遍历range(1, 11)
以获得1到10的数字(不包括11)。您可以查看range()
以获得特定的行为。
另外,如其他答案所指出的那样,shutil.copyfile()
的好处是它避免了打开文件的需要,如上所述,并且您可以直接复制内容而没有任何问题。
话虽如此,source code仍然可以在后台打开文件,所以我认为这是需要考虑的事情。