微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python中添加到txtfile的顶部?

如何解决如何在python中添加到txtfile的顶部?

我有一个 sql 查询 txt 文件,我想附加到(在顶部)。

我要添加的项目来自这个 yml 文件

data: 
    START_DT: '202001'
    END_DT: '202104'

我在我的 python 脚本中调用这个 yml 文件

import yaml

with open("data.yml","r") as ymlfile:
    cfg = yaml.load(ymlfile)

我的sql文件的顶部是:

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 举报,一经查实,本站将立刻删除。