#! /usr/bin
# -*- coding: utf-8 -*-
# 函数名一律小写,如有多个单词,用下划线隔开,私有函数在函数前加一个下划线_
def create_sql_command(filedir, inputfile, tablename,outputfile):
""" 创建SQL执行命令脚本 -无返回值void functionn"""
with open(inputfile, mode='r', encoding='utf-8') as fileobj:
# with open(filename1, 'rb') as fp1, open(filename2, 'rb') as fp2, open(filename3, 'rb') as fp3:
# 文件对象提供的 readlines 返回一个列表(list)变量
stringlist = fileobj.readlines()
# 列表[] 变为字符串,列表是可变的 join接收字符串列表并拼接每个元素,
# split将字符串拆成单词列表,list函数将字符串拆成单个字母的列表
fsavefile = open(outputfile, mode='w', encoding='utf-8')
fsavefile.write("------------------------------------------start---------------------------------- \n")
config_string = 'insert into table ' + tablename + " partition(partition_date = '2019-07-06') \n" \
+ "select * from ( \n"
fsavefile.write(config_string)
# len() 方法返回列表元素个数- len() 方法返回对象(字符、列表、元组等)长度或项目个数
K = len(stringlist)
# 遍历-循环
# enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)
# 组合为一个索引序列,同时列出数据和数据下标,start -- 下标起始位置。
for i, line in enumerate(stringlist, start=1):
# # for i, j, k in zip(fp1, fp2, fp3):
print(i)
data = line.split("\t")
# 字符串分隔/读取txt文件时有隐藏换行符,所以使用 .strip()
student_id = "'" + data[0].strip() + "' as student_id"
grade_code = "'" + data[1].strip() + "' as grade_code"
class_id = "'" + data[2].strip() + "' as class_id"
linesql = "select " \
+ student_id + "," \
+ grade_code + ", "\
+ class_id \
+ "\n"
purelinesql = linesql + " union all "
if 0 < i & i < K-1:
print(purelinesql)
fsavefile.write(purelinesql)
fsavefile.write("\n")
elif i == K-1:
print(linesql)
fsavefile.write(linesql)
fsavefile.write("\n")
fsavefile.write(") t1 \n")
fsavefile.write("------------------------------------------end----------------------------------\n")
fsavefile.close()
# __name__是内置变量 _name__这个系统变量显示了当前模块执行过程中的名称,
# 当该模块被直接执行的时候,__name__ 等于文件名(包含后缀 .py );
# 如果该模块 import 到其他模块中,则该模块的 __name__ 等于模块名称(不包含后缀.py)。而“__main__” 始终指当前执行模块的名称(包含后缀.py)
# 当.py文件被直接运行时, if __name__ == '__main__'之下的代码块将被运行
# 当.py文件以模块形式被导入时,则为这个模块的名称。不满足 __name__=="__main__" 的条件,因此,无法执行其后的代码。 即if __name__ == '__main__'之下的代码块不被运行。作为模块(也就是库),被其他.py文件导入
# python编译器读取源文件的时候会执行它找到的所有代码,而在执行之前会根据当前运行的模块是否为主程序而定义变量name的值为_main_还是模块名
if __name__ == "__main__":
filedir = 'F:/PythonProject/Python/Data'
# 输入文件的名称
filename = 'TestBaseData_01.txt'
input_file = "/".join([filedir, filename])
print("输入文件名: " + input_file)
# 变量名尽量小写, 如有多个单词,用下划线隔开,常量采用全大写,如有多个单词,使用下划线隔开
table_name = 'base.example_type_d'
outputfile = "/".join([filedir, tablename+'.sql'])
# 无返回值函数会返回一个特殊值 None 函数如果没有写return,默认表示返回 None
create_sql_command(filedir, input_file, table_name,outputfile)