|
|
import csv |
|
|
import random |
|
|
import os |
|
|
import shutil |
|
|
|
|
|
def random_read_from_csv(filename): |
|
|
script_dir = os.path.dirname(os.path.abspath(__file__)) |
|
|
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) |
|
|
|
|
|
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 ) |
|
|
|
|
|
|
|
|
if(directory=="./csvfiles/" or directory=="./csvfiles/special_lists/" or directory=="./csvfiles/templates/"): |
|
|
for filename in os.listdir(userfilesfolder): |
|
|
if(filename == userfilereplacename): |
|
|
|
|
|
full_path = os.path.join(script_dir, userfilesdirectory ) |
|
|
csvfilename = csvfilename + "_replace" |
|
|
replacing = True |
|
|
|
|
|
|
|
|
|
|
|
if(replacing == False and insanitylevel > 0): |
|
|
if(insanitylevel < 4): |
|
|
for filename in os.listdir(directoryfilesfolder): |
|
|
if(filename == mediumfilename): |
|
|
|
|
|
full_path = os.path.join(script_dir, directory ) |
|
|
csvfilename = csvfilename + "_light" |
|
|
replacing = True |
|
|
|
|
|
if(insanitylevel < 7 and random.randint(0,13) < 12 and replacing == False): |
|
|
for filename in os.listdir(directoryfilesfolder): |
|
|
if(filename == lightfilename): |
|
|
|
|
|
full_path = os.path.join(script_dir, directory ) |
|
|
csvfilename = csvfilename + "_medium" |
|
|
replacing = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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]) |
|
|
|
|
|
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]) |
|
|
|
|
|
|
|
|
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]) |
|
|
|
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
fp.write("%s\n" % item) |
|
|
|
|
|
|