使用python从文件中读取模式并写入另一个文件
我希望从文件中读取每个函数,并将其写入一个新文件,该文件对每个函数都是独立的 将_文件输入为:使用python从文件中读取模式并写入另一个文件,python,file,Python,File,我希望从文件中读取每个函数,并将其写入一个新文件,该文件对每个函数都是独立的 将_文件输入为: function Script1(){ var player = GetPlayer(); } function Script2(){ var sVar1 = 3; } function Script3(){ var sVar1 = 2; } 如何复制每个函数的内容?您可以使用此正则表达式,假设所有函数都从它们自己的行(函数SomeName()\n)开始,
function Script1(){
var player = GetPlayer();
}
function Script2(){
var sVar1 = 3;
}
function Script3(){
var sVar1 = 2;
}
如何复制每个函数的内容?您可以使用此正则表达式,假设所有函数都从它们自己的行(
函数SomeName()\n
)开始,并在新行(\n}
)结束,如您的示例所示:
import re
with open('file.js', 'r') as f:
content = f.read()
functions = re.findall(r'(function\s.+?\(.*?\)\n.+?\n\})', content, re.DOTALL)
for i, func in enumerate(functions):
with open('func{}.js'.format(i), 'w') as f:
f.write(func)
记住re.DOTALL
使正则表达式匹配跨越多行的函数
输出示例:
func1.js:
function Script1(){
var player = GetPlayer();
}
您可以只使用正则表达式:
import re
with open('input_file.js', 'r') as file:
script_str = file.read()
exp = re.compile(r'function\s+([^\s(]+)\s*\([^)]*\)\s*\{([^}]*)\}')
matches = exp.findall(script_str)
for m in matches:
script_name, script_content = m[0], m[1].strip()
with open('%s.js' % script_name, 'w') as file:
file.write(script_content)
如果您还想捕获函数参数,只需在正则表达式的相应部分添加一个组(即,用括号环绕
[^)]*
。如果javascript源代码一开始就简单且格式良好,您可以使用regex获得
对于涉及的更多内容,我建议使用合适的解析器,如。输入文件是js。我正在使用python来读/写文件。那么您希望每个函数中的每个变量都放在自己的文本文件中吗?或者您还需要函数声明和大括号吗?是的,函数声明和bra.ces也应该这样做,但是为每个函数创建新文件会导致类型错误:无法连接'str'和'int'对象。用open('func'+i+'.js',w')作为f:对不起,我错了。更正了。js把我的python弄糊涂了。您可以使用
'func{}.js'.format(i)
,因为新文件名感觉正确,它会给出一个类型错误,因为“\u sre.sre\u Match”对象是不可编辑的(对于匹配中的m),这会为每个函数读取创建一个新文件。@Dev One抱歉,它是exp.findall
,而不是exp.Match
。这不会创建任何文件,只会在内存中创建一个dict对象。你可能想把它写进一个文件,或者打印出来,或者别的什么。哦,好吧,我不明白那部分,我会修正它:D