如何在python脚本中增加变量(带数字)?

时间:2019-01-03 10:12:59

标签: python python-2.7

使用下面给定的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')

5 个答案:

答案 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仍然可以在后台打开文件,所以我认为这是需要考虑的事情。