Python; 如何替换字符串模式并保存到文件,按文件夹名的字符串变量重命名文件?

-1 投票
3 回答
903 浏览
提问于 2025-04-18 15:48

我在电脑里为每个产品都建了一个文件夹;

/PRODUCTS/PRODUCT_XXX

/PRODUCT_001
/PRODUCT_002
/PRODUCT_003
/PRODUCT_004
/PRODUCT_005
...
/PRODUCT_999

每个文件夹里都有一个叫 PRODUCT_XXX.html 的文件,还有产品的图片和数据...

如果我想改变 HTML 的布局,我不想重新制作所有的 PRODUCT_XXX.html 文件。

我想在根文件夹里有一个 PRODUCT_XXX.html 文件,

/PRODUCTS/PRODUCT_XXX.html

然后把它复制到所有产品编号的文件夹里,只替换掉 XXX 这个部分,换成文件夹名字里的产品编号。

prodnum = "555"    #  Actually,  would need to read the Product Number from the OS
                   folder name..
               #  But will do that later,  after I get this on the below working...

f1 = open('PRODUCT_XXX.html', 'r')
f2 = open('/PRODUCT_%D/PRODUCT_%D.html', prodnum, 'w'  )
for line in f1:
    f2.write(line.replace('PRODUCT_XXX', 'PRODUCT_%D', prodnum))
                # (then later could do also other things here..)
f1.close()
f2.close()

我试过用 %D、%s 等等,但没能成功保存 PRODUCT_555.html 文件。怎么用字符串变量名来保存文件呢?我试着在网上找一些例子,但感觉很难找到...

3 个回答

0

如果我有一个叫做 index_numbers.txt 的文件,里面有数字 1, 2, 3, 4, 5, 6,直到 1000,每行一个数字;

  import shutil
  file_read = open("index_numbers.txt", 'r')


  def do_the_thing(indexnum):
     print(indexnum)
     file1 = open("fileXXX.html", 'r')
     file2 = open("file{0}.html".format(indexnum), 'wb')

     for line in file1:
        file2.write(line.replace('XXX', '%s' % indexnum))   

     file1.close()
     file2.close()


  line_from_file = file_read.readline()

     for line_from_file in file_read:
       print(line_from_file) 
       line_from_file = line_from_file[0:-1]
       indexnum = line_from_file

       shutil.copy2('fileXXX.html', 'file{0}.html'.format(indexnum))

       do_the_thing(indexnum)

   file_read.close() 

这样做可以实现吗?
但是如果想要在文件中替换更多的文本字段,应该怎么修改这个脚本呢?

   -  replace the XXX with the index number
   -  replace the YYY with Product short name
   -  replace the ZZZ with Product long name
   -  ...
0

你想要的是这个:

f2 = open('/PRODUCT_{0}/PRODUCT_{0}.html'.format(prodnum), 'w')
2

你缺少了一个%,比如说:

f2.write(line.replace('PRODUCT_XXX', 'PRODUCT_%d' % prodnum)) # note lowercase d

不过用str.format来写会更清晰,也不容易出错:

f2.write(line.replace('PRODUCT_XXX', 'PRODUCT_{0}'.format(prodnum)))

撰写回答