1. 程式人生 > >【python修改檔案】帶引數修改資料夾名、資料夾裡檔名、檔案內容等

【python修改檔案】帶引數修改資料夾名、資料夾裡檔名、檔案內容等

原始碼如下:

# -*- coding: utf-8 -*-
#coding=utf-8
'''
					指令碼說明
								
功能:在新增新遙控時,需要手動改檔名和檔案內容。現執行指令碼可自動修改(碼值仍需要手動修改)

使用:python ir_modify.py "原有的檔名" "需要的檔名"     例:python ir_modify.py "IR10N" "IRCHAOYE"

注意:該指令碼只能放在遙控資料夾的根目錄下,不能放到其他地方。	
	
'''
import os
import os.path
import sys
import string

rootdir = "."
str = sys.argv[1]
s_old = str
s = str.lower()
s2 = sys.argv[2]
s2_new = s2.lower()

for parent,dirnames,filenames in os.walk(rootdir):
	for dirname in dirnames:
		if cmp(dirname,sys.argv[1]) == 0:				
			os.rename(dirname,sys.argv[2])
			print "success!!"
path =os.path.abspath(sys.argv[2])

for parent,dirnames,filenames in os.walk(path):
	for filename in filenames:
		if ".h" in filename:
			Hstrname = filename	
for parent,dirnames,filenames in os.walk(path):
	for filename in filenames:
		Namestr = filename	
		os.chdir(path)
		infile = open(filename, "r")
		infile_new = open("test.h","w")
		str = filename.lower()

		for line in infile:
			if (line.find(Hstrname) != -1):	
				line = line.replace(Hstrname,s2_new+"_map.h")
				infile_new.write(line)
			elif(line.find(s_old+"_map.c") != -1):	
				line = line.replace(s_old+"_map.c",s2+"_map.c")
				infile_new.write(line)
			elif(line.find(s_old) != -1):	
				line = line.replace(s_old,s2)
				infile_new.write(line)
			elif(line.find("__"+s_old+"_MAP_H__") != -1):	
				line = line.replace("__"+s_old+"_MAP_H__","__"+s2+"_MAP_H__")
				infile_new.write(line)
			else:
				infile_new.write(line)
		infile.close()
		for parent,dirnames,filenames in os.walk(path):
			for filename in filenames:	
				if filename in "test.h":
					os.remove(Namestr)
					os.rename(filename,Namestr)
	
for parent,dirnames,filenames in os.walk(path):
	for filename in filenames:	
		if s in filename:
			filename_new = filename.replace(s,s2_new)
			os.chdir(path)
			os.rename(filename,filename_new)		

註釋及知識總結:

1.python執行的時候帶中文出錯問題,在最開頭要加上下面兩端程式碼。

# -*- coding: utf-8 -*-
#coding=utf-8

2.引數說明:python 指令碼名 引數1 引數2 :sys.argv[0]指令碼名  sys.argv[1]引數1  sys.argv[2]引數2  以此類推

3.遍歷目錄、資料夾名等。

for parent,dirnames,filenames in os.walk(rootdir):
	for dirname in dirnames:
    ...
    ...
    ...
    ...

4.獲取一個檔案的目錄。

path =os.path.abspath(檔名)

5.進入某個路徑下。

os.chdir(路徑)

6.修改檔名/資料夾名。

os.rename(dirname,新名字)       #修改資料夾名字

os.rename(filename,新名字)        #修改檔名

7.修改檔案內容,替換某個字串。

        infile = open(filename, "r")
        infile_new = open(filename_new,"w")
        for line in infile:
            line = line.replace(需要被替換的字串,新字串)
            infile_new.write(line)
        infile.close()
        infile_new.close()
        ...
        ...
        os.remove(filename)
		os.rename(filename_new,filename)
先以讀開啟檔案,然後新建一個檔案把字串替換好之後寫到新建的檔案中,最後刪除替換前的檔案,重新命名新建的檔案

下篇說明本篇的幾個函式的含義和中文錯誤的問題。