Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python脚本中增加变量(带数字)?_Python_Python 2.7 - Fatal编程技术网

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

如何在python脚本中增加变量(带数字)?,python,python-2.7,Python,Python 2.7,使用下面给定的python脚本,我尝试复制一个文本文件,并尝试创建同一文件的10个副本,如下所示: logs1.txt logs2.txt . . logs10.txt 基本上,我只需要增加目标文本文件名中的数字 我试过在range命令中使用“for循环”。但是我不知道如何在cp命令中增加一个数字 #/usr/bin/env python import subprocess class RunCmd(object): def cmd_run(self, cmd): s

使用下面给定的python脚本,我尝试复制一个文本文件,并尝试创建同一文件的10个副本,如下所示:

logs1.txt
logs2.txt
.
.
logs10.txt
基本上,我只需要增加目标文本文件名中的数字

我试过在range命令中使用“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')

由于
a.cmd\u 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
i=1
而我<11:
字符串='cp/sh/ec_rawlog/Logs_new_1.txt/sh/Logs/Logs%s.txt'%1!'
a=RunCmd()
a、 cmd_运行(字符串)
i+=1

它应该像

import shutil

for i in range(10):
    shutil.copyfile('/path/to/source/file','/destination/path/logs'+str(i+1)+'.txt')
没有必要创建一个类来实现如此简单的功能。此外,可以直接使用
shutil
模块复制文件,而不是创建子流程

有关舒特尔的更多信息:

编辑:

根据Bruno建议的替代代码:

import shutil

for i in range(1,11):
    shutil.copyfile('/path/to/source/file','/destination/path/logs{}.txt'.format(i))
该模块提供了许多关于文件和文件集合的高级操作。特别是,提供了支持文件复制和删除的功能

你应该使用

输出

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

其他答案都很好,但你也可以用老式的方法:

# 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)
您只需在
范围(1,11)
上迭代即可获得数字1-10,不包括11。您可以查看行为细节

另外,正如其他答案中所指出的,它的优点是避免了打开文件的需要,如上所示,并且您可以直接复制内容,而不会出现任何问题


已经说过了,它仍然打开引擎盖下的文件,所以我想这是一个值得考虑的问题。p> 看起来像是做简单事情的复杂方式。为什么要创建一个类来执行此操作?查看

shutil
模块。另外,学习python字符串操作的基础知识。您可以在范围(10)中有一个for循环,它运行相同的cmd命令,并通过将num连接到字符串来更新目标文件的名称/sh/logs/logs'+num+'.txt'同意,如果你真的想这样做,至少在
RunCmd
构造函数中关联命令,例如@RoadRunner No.@RoadRunner OP需要将格式化字符串传递给
a.cmd_run()
这一事实很明显。@brunodesshuilliers很公平,我已经删除了我的评论。我只是想说明为什么这个答案可能被否决的原因。@RoadRunner也够公平了;-)此外,OP问题是如何有效地增加字符串中的数字。大多数其他答案都更关注如何复制文件。你应该使用字符串格式而不是字符串串联,而且
range()
可以使用
start
参数,因此你根本不需要
i+1
。@Brunodesshuilliers在这一点上,除了是的,它更多的是关于外观,这是另一种语法。(当然,除非你真的需要担心性能),它不是“最重要的是外观”,而是编写可读的惯用代码。python程序员高度重视可读性。这两个特定示例之间的可读性差异是基于观点的。有人可能会认为
10
清楚地显示了正好有10次迭代。其他人可能更喜欢其他语法。此外,在这种情况下,由于没有太多不同的变量需要连接,您可以选择连接或使用
格式
。无论如何,我也提供了您建议的替代语法。
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
# 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)