Advertisement
Guest User

Untitled

a guest
Nov 12th, 2017
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.35 KB | None | 0 0
  1.  
  2. from random import choice
  3. from string import ascii_lowercase
  4. import numpy as np
  5. import datetime
  6. import random
  7. import pymysql
  8. import os
  9.  
  10. def get_db_connection():
  11.  
  12.     db_connection = pymysql.connect(host = 'localhost', # это все надо в константы
  13.                                  user = 'root',
  14.                                  password = '1234',
  15.                                  db = 'mysql',
  16.                                  charset = 'utf8',
  17.                                  cursorclass = pymysql.cursors.DictCursor)
  18.     return db_connection
  19.  
  20. def db_table_create():
  21.     db_connection = get_db_connection()
  22.     db_cursor = db_connection.cursor()
  23.     sql = '''CREATE TABLE IF NOT EXISTS testtable(
  24.                            date VARCHAR(30),
  25.                            english_string VARCHAR(30),
  26.                            russian_string VARCHAR(30),
  27.                            int_number INT(20),
  28.                            float_number FLOAT)''' # попробуй назвать так чтобы было понятно что оно возвращает
  29.     db_cursor.execute(sql)
  30.  
  31. def unpack_line(line):
  32.     split_line = str.split(line, '||')
  33.     dt = split_line[0]
  34.     eng_str = split_line[1]
  35.     rus_str = split_line[2]
  36.     int_num = split_line[3]
  37.     float_num = split_line[4].split('\n')
  38.     return dt, eng_str, rus_str, int_num, float_num[0]
  39.  
  40. def random_cyrillic_str(random_str_length):
  41.     ALPHABET = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
  42.     ALPHABET_LENGTH = str.__len__(ALPHABET) - 1
  43.     cyrillic_string = ""
  44.     for i in range(random_str_length):
  45.         temp_rand = random.randint(0, ALPHABET_LENGTH)
  46.         cyrillic_string += ALPHABET[temp_rand]
  47.     return cyrillic_string
  48.  
  49. def random_date(today_date, delta):
  50.     return datetime.date.fromordinal(today_date - random.randint(0, delta))
  51.  
  52. def delta_date(year_difference):
  53.     today_date = datetime.date.today()
  54.     late_date = datetime.date(today_date.year - year_difference, today_date.month, today_date.day)
  55.     today_date = datetime.datetime.toordinal(today_date)
  56.     late_date = datetime.datetime.toordinal((late_date))
  57.     delta = today_date - late_date
  58.     return today_date, delta
  59.  
  60. def file_merger(file_quantity):
  61.     merged_file = open('./txt_folder/merged_file.txt', 'w')
  62.     yes_answer = 0  # разве в питоне нет true false ?
  63.     sequence_to_delete = ''
  64.     deleted_str_counter = 0
  65.     answer = input('Do you like to delete something while merging? y\\n\n')
  66.     if answer == 'y':
  67.         sequence_to_delete = input('Input sequence you want to delete\n')
  68.         yes_answer = 1
  69.     for file_counter in range(file_quantity):
  70.         temp_file = open('./txt_folder/test_file' + str(file_counter + 1) + '.txt', 'r')
  71.         lines = temp_file.readlines()
  72.         temp_file.close()
  73.         temp_file = open('./txt_folder/test_file' + str(file_counter + 1) + '.txt', 'w')
  74.         for line in lines:
  75.             if yes_answer == 1:
  76.                 if sequence_to_delete in line:
  77.                     deleted_str_counter += 1
  78.                 else:
  79.                     merged_file.write(line)
  80.                     temp_file.write(line)
  81.             else:
  82.                 merged_file.write(line)
  83.                 temp_file.write(line)
  84.     if yes_answer == 1:
  85.         print('Amount of deleted lines with \'' + sequence_to_delete + '\' sequence: ' + str(deleted_str_counter) + '.\n')
  86.     return deleted_str_counter
  87.  
  88. def file_writer(file_quantity, line_quantity, year_difference, random_cyrillic_str_length, random_latin_str_length):
  89.     today_date, delta = delta_date(year_difference)
  90.     for file_counter in range(file_quantity):
  91.         temp_file = open('./txt_folder/test_file' + str(file_counter + 1) + '.txt', 'w')
  92.         for line_counter in range(line_quantity):
  93.             temp_file.write(str(random_date(today_date, delta)))
  94.             temp_file.write('||')
  95.             temp_file.write(''.join(choice(ascii_lowercase) for i in range(random_latin_str_length)))
  96.             temp_file.write('||')
  97.             temp_file.write(random_cyrillic_str(random_cyrillic_str_length))
  98.             temp_file.write('||')
  99.             temp_file.write(str(random.randrange(1, 10e7, 2)))
  100.             temp_file.write('||')
  101.             temp_file.write((str('{:.8f}'.format(random.random() + float(random.randint(1, 19))))))
  102.             temp_file.write('\n')
  103.         temp_file.close()
  104.  
  105. def select_int_from_db():
  106.     db_connection = get_db_connection()
  107.     db_cursor = db_connection.cursor()
  108.     sql = 'SELECT int_number FROM testtable'
  109.     db_cursor.execute(sql)
  110.     selected_int_from_db = []
  111.     db_dict_list = db_cursor.fetchall()
  112.     for item in db_dict_list:
  113.         selected_int_from_db.append(item['int_number'])
  114.     return selected_int_from_db
  115.  
  116. def select_float_from_db():
  117.     db_connection = get_db_connection()
  118.     db_cursor = db_connection.cursor()
  119.     sql = 'SELECT float_number FROM testtable'
  120.     db_cursor.execute(sql)
  121.     selected_float_from_db = []
  122.     db_dict_list= db_cursor.fetchall()
  123.     for item in db_dict_list:
  124.         selected_float_from_db.append(item['float_number'])
  125.     return selected_float_from_db
  126.  
  127. def selected_int_sum():
  128.     selected_int = select_int_from_db()
  129.     return sum(selected_int)
  130.  
  131. def selected_float_median():
  132.     selected_float = select_float_from_db()
  133.     return np.median(selected_float)
  134.  
  135. def folder_writer():
  136.     try:
  137.         os.makedirs('./txt_folder')
  138.     except OSError:
  139.         print('Folder already exist.')
  140.  
  141. def db_date_entry(rows_left_to_import):
  142.     rows_imported = 0
  143.     db_connection = get_db_connection()
  144.     try:
  145.         db_cursor = db_connection.cursor()
  146.         if ('SELECT COUNT(*) from testtable') == 0:
  147.             pass
  148.         else:
  149.             sql = 'DROP TABLE testtable'
  150.         db_cursor.execute(sql)
  151.         db_table_create()
  152.         merged_file = open('./txt_folder/merged_file.txt', 'r')
  153.         while True:
  154.             line = merged_file.readline()
  155.             if line == "":
  156.                 print('Rows imported:   ' + str(rows_imported) + '. Rows left to import:   ' + str(rows_left_to_import) + '.')
  157.                 break
  158.             print('Rows imported:   ' + str(rows_imported) + '. Rows left to import:   ' + str(rows_left_to_import) + '.')
  159.             date_line, english_str, cyrillic_str, int_num, float_num = unpack_line(line)
  160.             sql_item = '''INSERT INTO testtable(date, english_string, russian_string, int_number, float_number)
  161.                            VALUES('%(date)s', '%(english_string)s', '%(russian_string)s', '%(int_number)s', '%(float_number)s')
  162.                            ''' % {'date': date_line, 'english_string': english_str, 'russian_string': cyrillic_str,
  163.                                    'int_number': int_num, 'float_number': float_num}
  164.             db_cursor.execute(sql_item)
  165.             db_connection.commit()
  166.             rows_left_to_import -= 1
  167.             rows_imported += 1
  168.     finally:
  169.         db_connection.close()
  170.     merged_file.close()
  171.  
  172.  
  173.  
  174. if __name__ == '__main__':
  175.     FILE_QUANTITY = 10
  176.     LINE_QUANTITY = 10
  177.     TOTAL_ROW_QUANTITY = FILE_QUANTITY * LINE_QUANTITY
  178.     YEAR_DIFFERENCE = 5
  179.     RANDOM_LATIN_STR_LENGTH = 10
  180.     RANDOM_CYRILLIC_STR_LENGTH = 10
  181.  
  182.  
  183.     folder_writer()
  184.     file_writer(FILE_QUANTITY, LINE_QUANTITY, YEAR_DIFFERENCE, RANDOM_CYRILLIC_STR_LENGTH, RANDOM_LATIN_STR_LENGTH)
  185.     print("Merging files.") # поменяй на ''
  186.     print('Answer via console')
  187.     rows_left_to_import = (TOTAL_ROW_QUANTITY - file_merger(FILE_QUANTITY))
  188.     db_table_create()
  189.     db_date_entry(rows_left_to_import)
  190.     while True:
  191.         answer = input('Would you like to continue? y/n\n')
  192.         if answer == 'y':
  193.             answer = input("""Input what do you like to do?
  194.            merge
  195.            import to DateBase
  196.            take sum of integer number
  197.            take median of float numbers\n\n""")
  198.             if answer == 'merge':
  199.                 rows_left_to_import -= file_merger(FILE_QUANTITY)
  200.             elif answer == 'import':
  201.                 db_date_entry(rows_left_to_import)
  202.             elif answer == 'sum':
  203.                 print('Sum of int number from Date Base: ' + str(selected_int_sum()))
  204.             elif answer == 'median' :
  205.                 print('Median of float number from Date Base: ' + str(selected_float_median()))
  206.         else:
  207.             break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement