如何在python脚本中增加变量(带数字)?
使用下面给定的python脚本,我尝试复制一个文本文件,并尝试创建同一文件的10个副本,如下所示:如何在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
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)