Advertisement
Guest User

Untitled

a guest
Nov 12th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.12 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
  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