如何解决如何在python中添加到txtfile的顶部?
我有一个 sql 查询 txt 文件,我想附加到(在顶部)。
data:
START_DT: '202001'
END_DT: '202104'
import yaml
with open("data.yml","r") as ymlfile:
cfg = yaml.load(ymlfile)
set START_DT='202001';
set END_DT='202104';
我想更改 sql 文件的顶部,以便 strt 日期和结束日期的配置 yaml 文件中的任何内容都将更改 sql 查询中 start_dt、end_dt 的值。如何在仅使用配置中的值的同时为每个变量(字符串日期、结束日期)替换 SET 之后的值?
如果我不能在 START_DT 之后替换值,那么另一个选择是删除 SET 语句并使用 config.yml 变量从头开始重写,但如果我使用这种方式,我如何制作日期字符串 和我如何将其附加到 sql 文件的顶部或创建一个新的 tmp 文件?:
for k,v in cfg['data'].items():
print("SET",str(k)+':'+ v)
prints:
SET START_DT:201901
SET END_DT:202104
但日期不在“'”中,我更喜欢:SET START_DT:'201901'。同样,如果 txtfile/sql 文件,我不确定如何将上述打印语句附加到顶部。
有什么建议吗?
解决方法
这真的很简单:
- 您阅读了 YAML 配置
- 您将 YAML 中的第一行写入临时文件
- 您从 SQL 文件中读取了所有行
- 您将所有行写入临时文件
- 您删除旧文件
- 您移动临时文件以替换 SQL 文件
在代码中
import os
import yaml
# read the YAML configuration
with open("data.yml","r") as ymlfile:
cfg = yaml.load(ymlfile)
# Create a temporary file
with open("data.tmp","w") as tempfile:
# Write the lines from YAML
for k,v in cfg["data"].items():
tempfile.write(f"SET {k}='{v}';\n")
# Copy the contents of the old file ...
with open("data.sql") as oldfile:
for line in oldfile:
# ... as long as they haven't been set by YAML
set_by_yaml = False
for k,v in cfg["data"].items():
if line.startswith(f"SET {k}="):
set_by_yaml = True
if not set_by_yaml:
tempfile.write(line)
# Replace old file by new file
os.remove("data.sql")
os.rename("data.tmp","data.sql")
,
import yaml
file = open('write_to.txt','r+')
temp_data = file.readlines()
with open('read_from.yaml') as f:
data = yaml.load(f,Loader=yaml.FullLoader)
data = data.get('data')
START_DT = str(data.get('START_DT'))
END_DT = str(data.get('END_DT'))
lines_of_interest = temp_data[:2]
rest_of_the_file = temp_data[2:]
ST_DT = lines_of_interest[0]
ST_DT = ST_DT.split('=')
ST_DT[1] = "'"+START_DT+"';\n"
lines_of_interest[0] = ''.join('=').join(ST_DT)
EN_DT = lines_of_interest[1]
EN_DT = EN_DT.split('=')
EN_DT[1] = "'"+END_DT+"';\n"
lines_of_interest[1] = ''.join('=').join(EN_DT)
lines = lines_of_interest + rest_of_the_file
file = open('write_to.txt','w+')
file.writelines(lines)
这里,请注意我们要写入的文件是“write_to.txt”(我们在开头也从中读取)。我们从'read_from.yaml'获取必要的数据
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。