Python - 正在写入 python 文件?
Python - writing to python files?
有没有比使用 read/write 写入任何文件(如 txt 文件等)更方便的写入 python 文件的方法。
我的意思是python知道python文件的实际结构,所以如果我需要写入它,也许有一些更方便的方法来做?
如果没有这样的方法(或者太复杂了),那么最好的方法就是使用普通的[=15=来正常修改python文件](下面的例子)?
我的子目录中有很多这样的文件,名为:
__config__.py
这些文件用作配置。他们没有分配 python 字典,像这样:
{
'name': 'Hello',
'version': '0.4.1'
}
所以我需要做的是向所有这些 __config__.py
文件写入新版本(例如 'version': '1.0.0'
)。
更新
更具体地说,假设有一个 python 文件,其内容如下:
# Some important comment
# Some other important comment
{
'name': 'Hello',
'version': '0.4.1'
}
# Some yet another important comment
现在 运行 一些 python 脚本,它应该写入 python 文件修改给定的字典,写入后,输出应该是这样的:
# Some important comment
# Some other important comment
{
'name': 'Hello',
'version': '1.0.0'
}
# Some yet another important comment
所以换句话说,写入应该只修改version
键值,其他一切都应该保持写入前的状态。
我想出了解决办法。它不是很干净,但是可以用。如果有人有更好的答案,请写出来。
content = ''
file = '__config__.py'
with open(file, 'r') as f:
content = f.readlines()
for i, line in enumerate(content):
# Could use regex too here
if "'version'" in line or '"version"' in line:
key, val = line.split(':')
val = val.replace("'", '').replace(',', '')
version_digits = val.split('.')
major_version = float(version_digits[0])
if major_version < 1:
# compensate for actual 'version' substring
key_end_index = line.index('version') + 8
content[i] = line[:key_end_index] + ": '1.0.0',\n"
with open(file, 'w') as f:
if content:
f.writelines(content)
为了修改配置文件,你可以简单地这样做:
import fileinput
lines = fileinput.input("__config__.py", inplace=True)
nameTag="\'name\'"
versionTag="\'version\'"
name=""
newVersion="\'1.0.0\'"
for line in lines:
if line[0] != "'":
print(line)
else:
if line.startswith(nameTag):
print(line)
name=line[line.index(':')+1:line.index(',')]
if line.startswith(versionTag):
new_line = versionTag + ": " + newVersion
print(new_line)
注意这里的打印函数实际上是写入一个文件。
有关 print 函数如何为您书写的更多详细信息,请参阅 here
希望对您有所帮助。
有没有比使用 read/write 写入任何文件(如 txt 文件等)更方便的写入 python 文件的方法。
我的意思是python知道python文件的实际结构,所以如果我需要写入它,也许有一些更方便的方法来做?
如果没有这样的方法(或者太复杂了),那么最好的方法就是使用普通的[=15=来正常修改python文件](下面的例子)?
我的子目录中有很多这样的文件,名为:
__config__.py
这些文件用作配置。他们没有分配 python 字典,像这样:
{
'name': 'Hello',
'version': '0.4.1'
}
所以我需要做的是向所有这些 __config__.py
文件写入新版本(例如 'version': '1.0.0'
)。
更新
更具体地说,假设有一个 python 文件,其内容如下:
# Some important comment
# Some other important comment
{
'name': 'Hello',
'version': '0.4.1'
}
# Some yet another important comment
现在 运行 一些 python 脚本,它应该写入 python 文件修改给定的字典,写入后,输出应该是这样的:
# Some important comment
# Some other important comment
{
'name': 'Hello',
'version': '1.0.0'
}
# Some yet another important comment
所以换句话说,写入应该只修改version
键值,其他一切都应该保持写入前的状态。
我想出了解决办法。它不是很干净,但是可以用。如果有人有更好的答案,请写出来。
content = ''
file = '__config__.py'
with open(file, 'r') as f:
content = f.readlines()
for i, line in enumerate(content):
# Could use regex too here
if "'version'" in line or '"version"' in line:
key, val = line.split(':')
val = val.replace("'", '').replace(',', '')
version_digits = val.split('.')
major_version = float(version_digits[0])
if major_version < 1:
# compensate for actual 'version' substring
key_end_index = line.index('version') + 8
content[i] = line[:key_end_index] + ": '1.0.0',\n"
with open(file, 'w') as f:
if content:
f.writelines(content)
为了修改配置文件,你可以简单地这样做:
import fileinput
lines = fileinput.input("__config__.py", inplace=True)
nameTag="\'name\'"
versionTag="\'version\'"
name=""
newVersion="\'1.0.0\'"
for line in lines:
if line[0] != "'":
print(line)
else:
if line.startswith(nameTag):
print(line)
name=line[line.index(':')+1:line.index(',')]
if line.startswith(versionTag):
new_line = versionTag + ": " + newVersion
print(new_line)
注意这里的打印函数实际上是写入一个文件。 有关 print 函数如何为您书写的更多详细信息,请参阅 here
希望对您有所帮助。