【问题标题】:Python; how to replace string pattern and save to a file, rename the file by string variable from folder name to the filename?Python;如何替换字符串模式并保存到文件中,通过字符串变量将文件从文件夹名称重命名为文件名?
【发布时间】:2014-08-03 09:05:17
【问题描述】:

文件系统中的每个产品都有自己的文件夹;

/PRODUCTS/PRODUCT_XXX

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

每个文件夹都有PRODUCT_XXX.html文件以及产品的图片和数据...

我不想重新制作所有的 PRODUCT_XXX.html 文件,

如果我想更改 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 文件 如何按字符串变量名保存文件?试图谷歌一些例子,但那些似乎很难找到..

【问题讨论】:

  • 请注意,%d 不会给你'001' 1,它会给你'1'(而%D 不会给你任何东西;我不'不知道你从哪里得到的)。您需要 %03d 以 0 到宽度 3 的页面。或者,如果您按照答案建议切换到 str.format{0:03}{0:03d},而不仅仅是 {0}

标签: python string filenames


【解决方案1】:

你错过了%,例如

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

但是使用str.format 会更清晰,更不容易出错:

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

【讨论】:

  • 第一个不行;它只会引发ValueError,因为没有格式字符'D'。但这是 OP 的错误,而不是你的错误,它完美地说明了你的下一句关于 str.format 更清晰、更不容易出错……
  • @abarnert 已修复,谢谢;我通常从不使用%,尽管我仍然应该对其进行测试!
【解决方案2】:

你想要这个:

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

【讨论】:

  • 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()
【解决方案3】:

如果我有一个 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
   -  ...

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 2018-04-10
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2019-12-21
    • 2017-10-11
    相关资源
    最近更新 更多