import csv import random import os import shutil def random_read_from_csv(filename): script_dir = os.path.dirname(os.path.abspath(__file__)) # Script directory full_path = os.path.join(script_dir, "./csvfiles/" ) with open(full_path + filename + ".csv", "r",encoding="utf8") as csv_file: csv_reader = csv.reader(csv_file) output = (random.choice([line[0] for line in csv_reader])) return output def add_from_csv(completeprompt, csvfilename, addcomma, prefix, suffix): randomreadfromcsv = random_read_from_csv(csvfilename) #print(csvfilename+ ": " + randomreadfromcsv) addtoprompt = prefix + " " + randomreadfromcsv + " " + suffix if(addcomma == 1): return ", ".join([completeprompt,addtoprompt]) return " ".join([completeprompt,addtoprompt]) def csv_to_list(csvfilename, antilist=[], directory="./csvfiles/", lowerandstrip=0, delimiter=";", listoflistmode = False, skipheader = False, gender = "all", insanitylevel = -1): replacing = False userfilesdirectory = "./userfiles/" userfileaddonname = csvfilename + "_addon.csv" userfilereplacename = csvfilename + "_replace.csv" lightfilename = csvfilename + "_light.csv" mediumfilename = csvfilename + "_medium.csv" csvlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(script_dir, directory ) userfilesfolder = os.path.join(script_dir, userfilesdirectory ) directoryfilesfolder = os.path.join(script_dir, directory ) # check if there is a replace file if(directory=="./csvfiles/" or directory=="./csvfiles/special_lists/" or directory=="./csvfiles/templates/"): for filename in os.listdir(userfilesfolder): if(filename == userfilereplacename): # Just override the parameters, and let it run normally full_path = os.path.join(script_dir, userfilesdirectory ) csvfilename = csvfilename + "_replace" replacing = True # Go check for light or medium files if there is no override and there is an insanitylevel if(replacing == False and insanitylevel > 0): if(insanitylevel < 4): for filename in os.listdir(directoryfilesfolder): if(filename == mediumfilename): # Just override the parameters, and let it run normally full_path = os.path.join(script_dir, directory ) csvfilename = csvfilename + "_light" replacing = True # under 7, than only SOMETIMES take the full list if(insanitylevel < 7 and random.randint(0,13) < 12 and replacing == False): for filename in os.listdir(directoryfilesfolder): if(filename == lightfilename): # Just override the parameters, and let it run normally full_path = os.path.join(script_dir, directory ) csvfilename = csvfilename + "_medium" replacing = True # return empty list if we can't find the file. Build for antilist.csv if(os.path.isfile(full_path + csvfilename + ".csv")): with open(full_path + csvfilename + ".csv", "r", newline="",encoding="utf8") as file: reader = csv.reader(file, delimiter=delimiter) if(skipheader==True): next(reader) if(listoflistmode==True): csvlist = list(reader) else: for row in reader: value = row[0] if( gender != "all" and (row[1] == gender or row[1] == "genderless" or row[1] == "both") or gender == "all" ): if(value.lower().strip() not in antilist): if(lowerandstrip == 1): csvlist.append(row[0].lower().strip()) else: csvlist.append(row[0]) # dirty hack for possible .txt files if(os.path.isfile(full_path + csvfilename + ".txt")): with open(full_path + csvfilename + ".txt", "r", newline="",encoding="utf8") as file: reader = csv.reader(file, delimiter=delimiter) if(skipheader==True): next(reader) if(listoflistmode==True): csvlist = list(reader) else: for row in reader: value = row[0] if( gender != "all" and (row[1] == gender or row[1] == "genderless" or row[1] == "both") or gender == "all" ): if(value.lower().strip() not in antilist): if(lowerandstrip == 1): csvlist.append(row[0].lower().strip()) else: csvlist.append(row[0]) # do the add ons! if(directory=="./csvfiles/" or directory=="./csvfiles/special_lists/"): if(os.path.isfile(userfilesfolder + csvfilename + "_addon" + ".csv")): with open(userfilesfolder + csvfilename + "_addon" + ".csv", "r", newline="",encoding="utf8") as file: reader = csv.reader(file, delimiter=delimiter) if(skipheader==True): next(reader) if(listoflistmode==True): csvlist.append(list(reader)) else: for row in reader: value = row[0] if( gender != "all" and (row[1] == gender or row[1] == "genderless" or row[1] == "both") or gender == "all" ): if(value.lower().strip() not in antilist): if(lowerandstrip == 1): csvlist.append(row[0].lower().strip()) else: csvlist.append(row[0]) # remove duplicates, but check only for lowercase stuff deduplicated_list = [] lowercase_elements = set() if(listoflistmode==False): for element in csvlist: lowercase_element = element.lower() if lowercase_element not in lowercase_elements: lowercase_elements.add(lowercase_element) deduplicated_list.append(element) else: deduplicated_list = csvlist return deduplicated_list def artist_category_by_category_csv_to_list(csvfilename,artist): csvlist = [] mediumlist = [] descriptionlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(script_dir, "./csvfiles/" ) with open(full_path + csvfilename + ".csv", "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=",") for row in reader: if(row["Artist"] == artist): csvlist.append(row["Tags"]) mediumlist.append(row["Medium"]) descriptionlist.append(row["Description"]) return csvlist, mediumlist, descriptionlist def artist_category_csv_to_list(csvfilename,category): csvlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(script_dir, "./csvfiles/" ) with open(full_path + csvfilename + ".csv", "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=",") for row in reader: if(row[category] == "1"): csvlist.append(row["Artist"]) return csvlist def artist_descriptions_csv_to_list(csvfilename): csvlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(script_dir, "./csvfiles/" ) with open(full_path + csvfilename + ".csv", "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=",") for row in reader: csvlist.append(row["Description"]) return csvlist def load_config_csv(suffix=""): csvlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path_config_file = os.path.join(script_dir, "./userfiles/" ) full_path_default_config_file = os.path.join(script_dir, "./csvfiles/config/" ) if(suffix != ""): config_file = full_path_config_file + 'config_' + suffix + '.csv' default_config_file = full_path_default_config_file + 'default_config_' + suffix + '.csv' else: config_file = full_path_config_file + 'config.csv' default_config_file = full_path_default_config_file + 'default_config.csv' if not os.path.exists(config_file): shutil.copy2(default_config_file, config_file) print("Config file created.") with open(config_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=";") csvlist = [list(row.values()) for row in reader if not any(value.startswith('#') for value in row.values())] return csvlist def load_negative_list(): primerlist = [] negativelist = [] primeraddonlist = [] negativeaddonlist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path_default_negative_file = os.path.join(script_dir, "./csvfiles/special_lists/" ) negative_file = full_path_default_negative_file + 'negativewords.csv' full_path_replace_negative_file = os.path.join(script_dir, "./userfiles/" ) replace_negative_file = full_path_replace_negative_file + 'negativewords_replace.csv' full_path_addon_negative_file = os.path.join(script_dir, "./userfiles/" ) addon_negative_file = full_path_addon_negative_file + 'negativewords_addon.csv' if(os.path.isfile(replace_negative_file)): negative_file = replace_negative_file with open(negative_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=";") primerlist = [row["primer"] for row in reader] with open(negative_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=";") negativelist = [row["negative"] for row in reader] if(os.path.isfile(addon_negative_file)): with open(addon_negative_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=";") primeraddonlist = [row["primer"] for row in reader] with open(addon_negative_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=";") negativeaddonlist = [row["negative"] for row in reader] primerlist += primeraddonlist negativelist += negativeaddonlist return primerlist, negativelist def load_all_artist_and_category(): artistlist = [] categorylist = [] script_dir = os.path.dirname(os.path.abspath(__file__)) full_path_default_artist_file = os.path.join(script_dir, "./csvfiles/" ) artist_file = full_path_default_artist_file + 'artists_and_category.csv' with open(artist_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=",") artistlist = [row["Artist"] for row in reader] with open(artist_file, "r", newline="",encoding="utf8") as file: reader = csv.DictReader(file, delimiter=",") categorylist = [row["Tags"] for row in reader] return artistlist, categorylist def sort_and_dedupe_csv_file(): tokenlist = csv_to_list(csvfilename="tokens",skipheader=False) tokenlist = sorted(set(tokenlist)) newlist = [] for i in tokenlist: j = i.lower() result = all(c == i[0] for c in i) if result: print("String {} have all characters same".format(i)) else: newlist.append(j) newlist = sorted(set(newlist)) script_dir = os.path.dirname(os.path.abspath(__file__)) full_path = os.path.join(script_dir, "./csvfiles/special_lists/tokenwriter.csv" ) with open(full_path, 'w', encoding="utf8") as fp: for item in newlist: # write each item on a new line fp.write("%s\n" % item) # sort_and_dedupe_csv_file()