supplementary quotes appearing in my csv using python code - python
I did a code to generate multiple addresses and export it in csv
import csv
import ipaddress
import random
from random import shuffle
LAN = ipaddress.ip_network('192.168.0.0/16')
WAN1 = ipaddress.ip_network('11.10.8.0/22')
WAN2 = ipaddress.ip_network('12.10.8.0/22')
LAN_IP_Adresses = [ IP_LAN for IP_LAN in LAN.hosts()]
WAN1_IP_Adresses = [ IP_WAN1 for IP_WAN1 in WAN1.hosts()]
WAN2_IP_Adresses = [ IP_WAN2 for IP_WAN2 in WAN2.hosts()]
index_IP_GW = len(WAN1_IP_Adresses)-1
locations_list=['Abidjan','Abu Dhabi','Adana','Adelaide', 'Ahmadabad','Algiers','Amsterdam','Ankara','Anshan','Athens','BANGKOK','BUCHAREST','BUDAPEST','Bagdad','Bandung','Bangalore','Bangkok','Barcelona','Beirut','Belgrade','Bern','Bogota','Brasilia','Brazzaville','Brussels','Bursa','CAIRO','CARACAS','CONAKRY','Canberra','Casablanca','Changchun','Chengdu','Chicago','Copenhagen','Dakar','MINSK','Madrid','Medina','Nairobi','Napoli','Montreal',
'Odessa','Omdurman','Osaka','Ottawa','PYONGYANG','Paris','Pekin', 'Perth','Philadelphia','Phoenix','Pimpri Chinchwad','Porto','Porto Alegre','QUITO','Qingdao','Rabat','Rajkot','Riadh','Rio de Janeiro','Rome','SANTIAGO','Salvador','Samara','San Antonio','San Francisco','Sao Paulo','Sendai','Seongnam','Seoul','Shanghai','Singapore','Sydney','Taiyuan','Tehran','Tijuana','Tokyo','Toronto','Moscou','Moscow','Mumbai (Bombay)','Munich','México','Milan',
'Tripoli','Tunis','Vienna','Warsaw','Wuhan','Xian','Yaounde','Yokohama', 'Zapopan','hong kong','Dallas','Delhi','Doha','Dublin','Durban','Ecatepec','Frankfurt','Fukuoka','Giza','Hamburg','Havana','Helsinki','Houston','Hyderabad','Istanbul','Jaipur','Jakarta','Jeddah','Johannesburg','KIEV','Kaduna','Kano','Kazan','Kuala Lumpur''Kyoto','LUANDA','Lahore','Lanzhou','Le Caire','Leon','Lima','Lisbon','London','Los Angeles','Lyon','MANILA','Melbourne','New York']
#Site_Nmb=1
def initial_Sites_list_generator(filename='SITES_CI.csv', Number_of_Sites=1000):
file_to_output = open(filename,'w',newline='')
csv_writer = csv.writer(file_to_output,delimiter=',')
Site_Nbr=1
index = 0
csv_writer.writerow(["SITE_NAME", "SERIAL_NUMBER",'"LAN_IP_ADDRESS"','"WAN_IP_ADDRESS1"','"WAN_IP_ADDRESS2"','"GATEWAY_IP_ADDRESS1"','"GATEWAY_IP_ADDRESS2"','"ROUTE_REFLECTOR"','"LOCATIONS"','"HARDWAREMODEL"','"LANINT"','"WANINT1"','"WANINT2"','"BW_OUT"','"BW_IN"'])
for i in range(1,Number_of_Sites+1):
shuffle(locations_list)
location = random.choice(locations_list)
csv_writer.writerow(['"SITE'+ str(Site_Nbr)+'"',"2e70129bde9c4426b9213d4408c300",f'"{(LAN_IP_Adresses[index])}"',f'"{str(WAN1_IP_Adresses[index])}"',f'"{str(WAN2_IP_Adresses[index])}"',f'"{str(WAN1_IP_Adresses[index_IP_GW])}"',f'"{str(WAN2_IP_Adresses[index_IP_GW])}"','"False"',f'"{location}"','"ONEv600"','"gigabitethernet0/2"','"gigabitethernet0/0"','"gigabitethernet0/1"','"10"','"20"'])
Site_Nbr = Site_Nbr+1
index = index+1
file_to_output.close()
initial_Sites_list_generator('SITES_OVP.csv', 1000)
but i got unnecessary quotes added in my csv
You are adding the extra quotes yourself. In your for loop, change this line:
csv_writer.writerow(['"SITE'+ str(Site_Nbr)+'"',"2e70129bde9c4426b9213d4408c300",f'"{(LAN_IP_Adresses[index])}"',f'"{str(WAN1_IP_Adresses[index])}"',f'"{str(WAN2_IP_Adresses[index])}"',f'"{str(WAN1_IP_Adresses[index_IP_GW])}"',f'"{str(WAN2_IP_Adresses[index_IP_GW])}"','"False"',f'"{location}"','"ONEv600"','"gigabitethernet0/2"','"gigabitethernet0/0"','"gigabitethernet0/1"','"10"','"20"'])
to this:
csv_writer.writerow(['SITE'+ str(Site_Nbr)+"2e70129bde9c4426b9213d4408c300",
f'{(LAN_IP_Adresses[index])}',
f'{str(WAN1_IP_Adresses[index])}',
f'{str(WAN2_IP_Adresses[index])}',
f'{str(WAN1_IP_Adresses[index_IP_GW])}',
f'{str(WAN2_IP_Adresses[index_IP_GW])}',
'False',
f'{location}',
'ONEv600',
'gigabitethernet0/2',
'gigabitethernet0/0',
'gigabitethernet0/1',
'10',
'20'])
The CSV writer already adds quotes to strings as appropriate.
I did
csv_writer = csv.writer(file_to_output,delimiter=",",quoting=csv.QUOTE_ALL)
and it worked !
Related
Is there a way where I can replace the first '.' with '-' in my code for a domain generator
last time I've gotten some help on making a website name generator. I feel bad but i'm stuck at the moment and I need some help again to improve it. in my code there's a .txt file called combined which included these lines. After that i created a variable to add to the domain web = 'web' suffix = 'co.id' And then i write it out so that the it would print the line output to the Combined.txt output_count = 50 subdomain_count = 2 for i in range(output_count): out = [] for j in range(subdomain_count): out.append(random.choice(Test)) out.append(web) out.append(suffix) Example.write('.'.join(out)+"\n") with open("dictionaries/examples.txt") as f: websamples = [line.rstrip() for line in f] I want the output where instead of just login.download.web.co.id there would be more variety like login-download.web.co.id or login.download-web.co.id In the code i used Example.write('.'.join(out)+"\n") so that the. would be a separator for each characters. I was thinking of adding more, by making a similar code line and save it to a different .txt files but I feel like it would be too long. Is there a way where I can variate each character separation with this symbol - or _ instead of just a . in the output? Thanks!
Sure just iterate through a list of delimiters to add each of them to the output. web = 'web' suffix = 'co.id' output_count = 50 subdomain_count = 2 delimeters = [ '-', '.'] for i in range(output_count): out = [] for j in range(subdomain_count): out.append(random.choice(Test)) for delimeter in delimeters: addr = delimeter.join(out) addrs = '.'.join([addr, web, suffix]) print(addrs) Example.write(addrs + '\n') output my_pay.web.co.id my-pay.web.co.id my.pay.web.co.id pay_download.web.co.id pay-download.web.co.id pay.download.web.co.id group_login.web.co.id group-login.web.co.id group.login.web.co.id install_group.web.co.id install-group.web.co.id install.group.web.co.id ... ... update import itertools Test = ['download', 'login', 'my', 'ip', 'site', 'ssl', 'pay', 'install'] delimeters = [ '-', '.'] web = 'web' suffix = 'co.id' output_count = 50 subdomain_count = 2 for combo in itertools.combinations(Test, 2): out = '' for i, d in enumerate(delimeters): out = d.join(combo) out = delimeters[i-1].join([out, web]) addr = '.'.join([out, suffix]) print(addr) # Example.write(addr+'\n') output download-login.web.co.id download.login-web.co.id download-my.web.co.id download.my-web.co.id download-ip.web.co.id download.ip-web.co.id download-site.web.co.id download.site-web.co.id download-ssl.web.co.id download.ssl-web.co.id download-pay.web.co.id download.pay-web.co.id download-install.web.co.id download.install-web.co.id login-my.web.co.id login.my-web.co.id login-ip.web.co.id login.ip-web.co.id login-site.web.co.id login.site-web.co.id login-ssl.web.co.id login.ssl-web.co.id login-pay.web.co.id login.pay-web.co.id login-install.web.co.id login.install-web.co.id my-ip.web.co.id my.ip-web.co.id my-site.web.co.id my.site-web.co.id my-ssl.web.co.id my.ssl-web.co.id my-pay.web.co.id my.pay-web.co.id my-install.web.co.id my.install-web.co.id ip-site.web.co.id ip.site-web.co.id ip-ssl.web.co.id ip.ssl-web.co.id ip-pay.web.co.id ip.pay-web.co.id ip-install.web.co.id ip.install-web.co.id site-ssl.web.co.id site.ssl-web.co.id site-pay.web.co.id site.pay-web.co.id site-install.web.co.id site.install-web.co.id ssl-pay.web.co.id ssl.pay-web.co.id ssl-install.web.co.id ssl.install-web.co.id pay-install.web.co.id pay.install-web.co.id
As an alternative of replacing the final output, you could make the seperator random: import random seperators = ['-', '_', '.'] Example.write(random.choice(seperators).join(out)+"\n")
In order to ensure compliance with RFC 1035 I would suggest: from random import choices as CHOICES, choice as CHOICE output_count = 50 subdomain_count = 2 web = 'web' suffix = 'co.id' dotdash = '.-' filename = 'output.txt' Test = [ 'auth', 'access', 'account', 'admin' # etc ] with open(filename, 'w') as output: for _ in range(output_count): sd = CHOICE(dotdash).join(CHOICES(Test, k=subdomain_count)) print('.'.join((sd, web, suffix)), file=output)
XML Parsing Python ElementTree - Nested for loops
I'm using Jupyter Notebook and ElementTree (Python 3) to create a dataframe and save as csv from an XML file. Here is the XML format (in Estonian): <asutused hetk="2020-04-14T03:53:33" ver="2"> <asutus> <registrikood>10000515</registrikood> <nimi>Osaühing B.Braun Medical</nimi> <aadress /> <tegevusload> <tegevusluba> <tegevusloa_number>L04647</tegevusloa_number> <alates>2019-12-10</alates> <kuni /> <loaliik_kood>1</loaliik_kood> <loaliik_nimi>Eriarstiabi</loaliik_nimi> <haiglaliik_kood /> <haiglaliik_nimi /> <tegevuskohad> <tegevuskoht> <aadress>Harju maakond, Tallinn, Mustamäe linnaosa, J. Sütiste tee 17/1</aadress> <teenused> <teenus> <kood>T0038</kood> <nimi>ambulatoorsed üldkirurgiateenused</nimi> </teenus> <teenus> <kood>T0236</kood> <nimi>õe vastuvõtuteenus</nimi> </teenus> </teenused> </tegevuskoht> <tegevuskoht> <aadress>Harju maakond, Tallinn, Mustamäe linnaosa, J. Sütiste tee 17/1</aadress> <teenused> <teenus> <kood>T0038</kood> <nimi>ambulatoorsed üldkirurgiateenused</nimi> </teenus> <teenus> <kood>T0236</kood> <nimi>õe vastuvõtuteenus</nimi> </teenus> </teenused> </tegevuskoht> </tegevuskohad> </tegevusluba> <tegevusluba> <tegevusloa_number>L04651</tegevusloa_number> <alates>2019-12-11</alates> <kuni /> <loaliik_kood>2</loaliik_kood> <loaliik_nimi>Õendusabi</loaliik_nimi> <haiglaliik_kood /> <haiglaliik_nimi /> <tegevuskohad> <tegevuskoht> <aadress>Harju maakond, Tallinn, Mustamäe linnaosa, J. Sütiste tee 17/1</aadress> <teenused> <teenus> <kood>T0038</kood> <nimi>ambulatoorsed üldkirurgiateenused</nimi> </teenus> <teenus> <kood>T0236</kood> <nimi>õe vastuvõtuteenus</nimi> </teenus> </teenused> </tegevuskoht> <tegevuskoht> <aadress>Harju maakond, Tallinn, Mustamäe linnaosa, J. Sütiste tee 17/1</aadress> <teenused> <teenus> <kood>T0038</kood> <nimi>ambulatoorsed üldkirurgiateenused</nimi> </teenus> <teenus> <kood>T0236</kood> <nimi>õe vastuvõtuteenus</nimi> </teenus> </teenused> </tegevuskoht> </tegevuskohad> </tegevusluba> </tegevusload> <tootajad> <tootaja> <kood>D03091</kood> <eesnimi>Evo</eesnimi> <perenimi>Kaha</perenimi> <kutse_kood>11</kutse_kood> <kutse_nimi>Arst</kutse_nimi> <erialad> <eriala> <kood>E420</kood> <nimi>üldkirurgia</nimi> </eriala> </erialad> </tootaja> <tootaja> <kood>N01146</kood> <eesnimi>Karmen</eesnimi> <perenimi>Mežulis</perenimi> <kutse_kood>15</kutse_kood> <kutse_nimi>Õde</kutse_nimi> </tootaja> <tootaja> <kood>N01153</kood> <eesnimi>Nele</eesnimi> <perenimi>Terras</perenimi> <kutse_kood>15</kutse_kood> <kutse_nimi>Õde</kutse_nimi> </tootaja> <tootaja> <kood>N02767</kood> <eesnimi>Helena</eesnimi> <perenimi>Tern</perenimi> <kutse_kood>15</kutse_kood> <kutse_nimi>Õde</kutse_nimi> </tootaja> <tootaja> <kood>N12882</kood> <eesnimi>Hanna</eesnimi> <perenimi>Leemet</perenimi> <kutse_kood>15</kutse_kood> <kutse_nimi>Õde</kutse_nimi> </tootaja> </tootajad> </asutus> </asutused> Each "asutus" is a hospital and I need some of the information inside. Here is my code: tree = ET.parse("od_asutused.xml") root = tree.getroot() # open a file for writing data = open('EE.csv', 'w') # create the csv writer object csvwriter = csv.writer(data, delimiter=';') head = [] count = 0 for member in root.findall('asutus'): hospital = [] if count == 0: ident = member.find('registrikood').tag head.append(id) name = member.find('nimi').tag head.append(name) address = member.find('aadress').tag head.append(address) facility_type = member.find('./tegevusload/tegevusluba/haiglaliik_nimi').tag head.append(facility_type) site_address = member.find('./tegevusload/tegevusluba/tegevuskohad/tegevuskoht/aadress').tag head.append(site_address) for elem in member.findall('tegevusload'): list_specs = elem.find('./tegevusluba/tegevuskohad/tegevuskoht/teenused/teenus/nimi').tag head.append(list_specs) csvwriter.writerow(head) count = count + 1 ident = member.find('registrikood').text hospital.append(ident) name = member.find('nimi').text hospital.append(name) address = member.find('aadress').text hospital.append(address) facility_type = member.find('./tegevusload/tegevusluba/haiglaliik_nimi').text hospital.append(facility_type) site_address = member.find('./tegevusload/tegevusluba/tegevuskohad/tegevuskoht/aadress').text hospital.append(site_address) for spec in elem.findall('tegevusload'): list_specs = spec.find('./tegevusluba/tegevuskohad/tegevuskoht/teenused/teenus/nimi').text hospital.append(list_specs) csvwriter.writerow(hospital) data.close() #Upload csv for geocoding df = pd.read_csv(r'EE.csv', na_filter= False, delimiter=';') #Rename columns df.rename(columns = {'<built-in function id>':'id', 'nimi':'name', 'aadress':'address', 'haiglaliik_nimi':'facility_type', 'haiglaliik_kood':'facility_type_c', 'aadress.1':'site_address', 'nimi.1':'list_specs'}, inplace = True) #Add columns df['country'] = 'Estonia' df['cc'] = 'EE' df.head(10) And the result of the df.head(10): Result of dataframe The "list_specs" is blank no matter what I do. How can I populate this field with a list of each 'nimi' for each site address? Thank you.
I found in your code the following points to change: At least on my computer, calling csv.writer causes that newline chars are doubled. The remedy I found is to open the output file with additional parameters: data = open('EE.csv', 'w', newline='\n', encoding='utf-8') There is no sense to write head with Estonian column names and then rename the columns. Note also that in head.append(id) you use an undeclared variable (id). But this is not so important, as I changed this whole section with writing target column names (see below). As you write the CSV file to be read by read_csv, it should contain a fixed number of columns. So it is a bad practice to use a loop to write one element. Your instruction list_specs = elem.findall(...) was wrong, because elem is not set in the current loop. Instead you should use member (but I solved this detail other way). There is no sense to create a variable only in order to use it once. More concise and readable code is e.g. hospital.append(member.findtext('nimi')). To avoid long XPath expressions, with repeated initial part, I decided to set a temporary variable "in the middle" of this path, e.g. tgvLb = member.find('tegevusload/tegevusluba') and then use a relative XPath starting from this node. Your rename instruction contains one not needed column, namely facility_type_c. You read only 6 columns, not 7. So change the middle part of your code to: data = open('EE.csv', 'w', newline='\n', encoding='utf-8') csvwriter = csv.writer(data, delimiter=';') head = ['id', 'name', 'address', 'facility_type', 'site_address', 'list_specs'] csvwriter.writerow(head) for member in root.findall('asutus'): hospital = [] hospital.append(member.findtext('registrikood')) hospital.append(member.findtext('nimi')) hospital.append(member.findtext('aadress')) tgvLb = member.find('tegevusload/tegevusluba') hospital.append(tgvLb.findtext('haiglaliik_nimi')) tgvKoht = tgvLb.find('tegevuskohad/tegevuskoht') hospital.append(tgvKoht.findtext('aadress')) hospital.append(tgvKoht.findtext('teenused/teenus/nimi')) csvwriter.writerow(hospital) data.close() df = pd.read_csv(r'EE.csv', na_filter= False, delimiter=';') and drop df.rename from your code.
Python - How to count specific section in a list
I'm brand new to python and I'm struggling how to add certain sections of a cvs file in python. I'm not allowed to use "import cvs" I'm importing the TipJoke CVS file from https://vincentarelbundock.github.io/Rdatasets/datasets.html This is the only code I have so far that worked and I'm at a total loss on where to go from here. if __name__ == '__main__': from pprint import pprint from string import punctuation f = open("TipJoke.csv", "r") tipList = [] for line in f: #deletes the quotes line = line.replace('"', '') tipList.append(line) pprint(tipList[]) Output: [',Card,Tip,Ad,Joke,None\n', '1,None,1,0,0,1\n', '2,Joke,1,0,1,0\n', '3,Ad,0,1,0,0\n', '4,None,0,0,0,1\n', '5,None,1,0,0,1\n', '6,None,0,0,0,1\n', '7,Ad,0,1,0,0\n', '8,Ad,0,1,0,0\n', '9,None,0,0,0,1\n', '10,None,0,0,0,1\n', '11,None,1,0,0,1\n', '12,Ad,0,1,0,0\n', '13,None,0,0,0,1\n', '14,Ad,1,1,0,0\n', '15,Joke,1,0,1,0\n', '16,Joke,0,0,1,0\n', '17,Joke,1,0,1,0\n', '18,None,0,0,0,1\n', '19,Joke,0,0,1,0\n', '20,None,0,0,0,1\n', '21,Ad,1,1,0,0\n', '22,Ad,1,1,0,0\n', '23,Ad,0,1,0,0\n', '24,Joke,0,0,1,0\n', '25,Joke,1,0,1,0\n', '26,Joke,0,0,1,0\n', '27,None,1,0,0,1\n', '28,Joke,1,0,1,0\n', '29,Joke,1,0,1,0\n', '30,None,1,0,0,1\n', '31,Joke,0,0,1,0\n', '32,None,1,0,0,1\n', '33,Joke,1,0,1,0\n', '34,Ad,0,1,0,0\n', '35,Joke,0,0,1,0\n', '36,Ad,1,1,0,0\n', '37,Joke,0,0,1,0\n', '38,Ad,0,1,0,0\n', '39,Joke,0,0,1,0\n', '40,Joke,0,0,1,0\n', '41,Joke,1,0,1,0\n', '42,None,0,0,0,1\n', '43,None,0,0,0,1\n', '44,Ad,0,1,0,0\n', '45,None,0,0,0,1\n', '46,None,0,0,0,1\n', '47,Ad,0,1,0,0\n', '48,Joke,0,0,1,0\n', '49,Joke,1,0,1,0\n', '50,None,1,0,0,1\n', '51,None,0,0,0,1\n', '52,Joke,1,0,1,0\n', '53,Joke,1,0,1,0\n', '54,Joke,0,0,1,0\n', '55,None,1,0,0,1\n', '56,Ad,0,1,0,0\n', '57,Joke,0,0,1,0\n', '58,None,0,0,0,1\n', '59,Ad,0,1,0,0\n', '60,Joke,1,0,1,0\n', '61,Ad,0,1,0,0\n', '62,None,1,0,0,1\n', '63,Joke,0,0,1,0\n', '64,Ad,0,1,0,0\n', '65,Joke,0,0,1,0\n', '66,Ad,0,1,0,0\n', '67,Ad,0,1,0,0\n', '68,Ad,0,1,0,0\n', '69,None,0,0,0,1\n', '70,Joke,1,0,1,0\n', '71,None,1,0,0,1\n', '72,None,0,0,0,1\n', '73,None,0,0,0,1\n', '74,Joke,0,0,1,0\n', '75,Ad,1,1,0,0\n', '76,Ad,0,1,0,0\n', '77,Ad,1,1,0,0\n', '78,Joke,0,0,1,0\n', '79,Joke,0,0,1,0\n', '80,Ad,1,1,0,0\n', '81,Ad,0,1,0,0\n', '82,None,0,0,0,1\n', '83,Ad,0,1,0,0\n', '84,Joke,0,0,1,0\n', '85,Joke,0,0,1,0\n', '86,Ad,1,1,0,0\n', '87,None,1,0,0,1\n', '88,Joke,1,0,1,0\n', '89,Ad,0,1,0,0\n', '90,None,0,0,0,1\n', '91,None,0,0,0,1\n', '92,Joke,0,0,1,0\n', '93,Joke,0,0,1,0\n', '94,Ad,0,1,0,0\n', '95,Ad,0,1,0,0\n', '96,Ad,0,1,0,0\n', '97,Joke,1,0,1,0\n', '98,None,0,0,0,1\n', '99,None,0,0,0,1\n', '100,None,1,0,0,1\n', '101,Joke,0,0,1,0\n', '102,Joke,0,0,1,0\n', '103,Ad,1,1,0,0\n', '104,Ad,0,1,0,0\n', '105,Ad,0,1,0,0\n', '106,Ad,1,1,0,0\n', '107,Ad,0,1,0,0\n', '108,None,0,0,0,1\n', '109,Ad,0,1,0,0\n', '110,Joke,1,0,1,0\n', '111,None,0,0,0,1\n', '112,Ad,0,1,0,0\n', '113,Ad,0,1,0,0\n', '114,None,0,0,0,1\n', '115,Ad,0,1,0,0\n', '116,None,0,0,0,1\n', '117,None,0,0,0,1\n', '118,Ad,0,1,0,0\n', '119,None,1,0,0,1\n', '120,Ad,1,1,0,0\n', '121,Ad,0,1,0,0\n', '122,Ad,1,1,0,0\n', '123,None,0,0,0,1\n', '124,None,0,0,0,1\n', '125,Joke,1,0,1,0\n', '126,Joke,1,0,1,0\n', '127,Ad,0,1,0,0\n', '128,Joke,0,0,1,0\n', '129,Joke,0,0,1,0\n', '130,Ad,0,1,0,0\n', '131,None,0,0,0,1\n', '132,None,0,0,0,1\n', '133,None,0,0,0,1\n', '134,Joke,1,0,1,0\n', '135,Ad,0,1,0,0\n', '136,None,0,0,0,1\n', '137,Joke,0,0,1,0\n', '138,Ad,0,1,0,0\n', '139,Ad,0,1,0,0\n', '140,None,0,0,0,1\n', '141,Joke,0,0,1,0\n', '142,None,0,0,0,1\n', '143,Ad,0,1,0,0\n', '144,None,1,0,0,1\n', '145,Joke,0,0,1,0\n', '146,Ad,0,1,0,0\n', '147,Ad,0,1,0,0\n', '148,Ad,0,1,0,0\n', '149,Joke,1,0,1,0\n', '150,Ad,1,1,0,0\n', '151,Joke,1,0,1,0\n', '152,None,0,0,0,1\n', '153,Ad,0,1,0,0\n', '154,None,0,0,0,1\n', '155,None,0,0,0,1\n', '156,Ad,0,1,0,0\n', '157,Ad,0,1,0,0\n', '158,Joke,0,0,1,0\n', '159,None,0,0,0,1\n', '160,Joke,1,0,1,0\n', '161,None,1,0,0,1\n', '162,Ad,1,1,0,0\n', '163,Joke,0,0,1,0\n', '164,Joke,0,0,1,0\n', '165,Ad,0,1,0,0\n', '166,Joke,1,0,1,0\n', '167,Joke,1,0,1,0\n', '168,Ad,0,1,0,0\n', '169,Joke,1,0,1,0\n', '170,Joke,0,0,1,0\n', '171,Ad,0,1,0,0\n', '172,Joke,0,0,1,0\n', '173,Joke,0,0,1,0\n', '174,Ad,0,1,0,0\n', '175,None,0,0,0,1\n', '176,Joke,1,0,1,0\n', '177,Ad,0,1,0,0\n', '178,Joke,0,0,1,0\n', '179,Joke,0,0,1,0\n', '180,None,0,0,0,1\n', '181,None,0,0,0,1\n', '182,Ad,0,1,0,0\n', '183,None,0,0,0,1\n', '184,None,0,0,0,1\n', '185,None,0,0,0,1\n', '186,None,0,0,0,1\n', '187,Ad,0,1,0,0\n', '188,None,1,0,0,1\n', '189,Ad,0,1,0,0\n', '190,Ad,0,1,0,0\n', '191,Ad,0,1,0,0\n', '192,Joke,1,0,1,0\n', '193,Joke,0,0,1,0\n', '194,Ad,0,1,0,0\n', '195,None,0,0,0,1\n', '196,Joke,1,0,1,0\n', '197,Joke,0,0,1,0\n', '198,Joke,1,0,1,0\n', '199,Ad,0,1,0,0\n', '200,None,0,0,0,1\n', '201,Joke,1,0,1,0\n', '202,Joke,0,0,1,0\n', '203,Joke,0,0,1,0\n', '204,Ad,0,1,0,0\n', '205,None,0,0,0,1\n', '206,Ad,0,1,0,0\n', '207,Ad,0,1,0,0\n', '208,Joke,0,0,1,0\n', '209,Ad,0,1,0,0\n', '210,Joke,0,0,1,0\n', '211,None,0,0,0,1\n'] I'm currently trying to find the Total number of entries of the specified card type and the Percentage of tips given for the specified card type with two decimal places of precision. The tip column is the 0 or 1 right after the card type (None, Ad, Joke).
if you are allowed with pandas library then import pandas as pd df = pd.read_csv("TipJoke.csv") df is a pandas dataframe object in which you can perform multiple filtering task according to your need. for example if you want to get data for Joke you can filter like this: print(df[df["Card"] == "Joke"]) Though, i'm just providing you the direction , not whole logic for your question.
This works from pprint import pprint from string import punctuation counts = {"Joke": 0, "Ad": 0, "None": 0} with open("TipJoke.csv", "r") as f: for line in f: line_clean = line.replace('"', "").replace("\n", "").split(",") try: counts[line_clean[1]] += int(line_clean[2]) except: pass print(counts)
how to add hyphen in between string using python
import csv x=[] y=[] with open ('x_wind.txt','r') as csvfile: plots= csv.reader(csvfile, delimiter=',') for row in plots: x.append(int(row[0])) y.append(float(row[1])) I have wrote above code to extract data from a file now , i want my data should print as 2018-06-14:1 sample data is 2018061402,6.8750 2018061403,8.0000 2018061404,7.7500 2018061405,7.3750 2018061406,6.7500 2018061407,6.1250 2018061408,5.7500 2018061409,5.6250 2018061410,5.5000 2018061411,5.5000 2018061412,5.3750 2018061413,5.1250 2018061414,4.6250 2018061415,3.8750 2018061416,3.5000 2018061417,3.1250 2018061418,3.6250 2018061419,4.2500 2018061420,4.7500 2018061421,5.8750 2018061422,6.2500 2018061423,6.6250 2018061500,6.7500 2018061501,6.7500 2018061502,7.3750 2018061503,7.1250 2018061504,6.1250 2018061505,5.2500 2018061506,4.7500 2018061507,4.1250 2018061508,4.0000 2018061509,3.8750 2018061510,3.8750 2018061511,4.1250 2018061512,4.5000 2018061513,4.3750 2018061514,3.5000 2018061515,3.1250 2018061516,3.1250 2018061517,3.0000 2018061518,3.0000 2018061519,3.5000 2018061520,3.8750 2018061521,4.1250 2018061522,4.3750 2018061523,4.6250 2018061600,5.1250 2018061601,4.8750 2018061602,6.0000 2018061603,5.5000 2018061604,4.7500 2018061605,3.8750 2018061606,3.3750 2018061607,2.7500 2018061608,2.3750 2018061609,2.5000 2018061610,2.7500 2018061611,3.1250 2018061612,3.3750 2018061613,3.6250 2018061614,3.2500 2018061615,2.7500 2018061616,3.1250 2018061617,2.8750 2018061618,1.5000 2018061619,1.5000 2018061620,1.6250 2018061621,1.8750 2018061622,2.6250 2018061623,3.3750 2018061700,4.1250 2018061701,4.7500 2018061702,6.1250 2018061703,6.1250 2018061704,5.5000 2018061705,5.0000 2018061706,4.2500 2018061707,4.0000 2018061708,3.8750 2018061709,4.0000 2018061710,4.3750 2018061711,4.5000 2018061712,4.5000 2018061713,4.0000 2018061714,3.5000 2018061715,3.0000 2018061716,2.7500 2018061717,2.2500 2018061718,0.3750 2018061719,1.5000 2018061720,2.1250 2018061721,2.1250 2018061722,2.2500 2018061723,3.1250 2018061800,4.2500 2018061801,5.5000 2018061802,7.1250 2018061803,7.1250 2018061804,6.3750 2018061805,5.7500 2018061806,5.3750 2018061807,5.0000 2018061808,5.1250 2018061809,5.0000 2018061810,5.0000 2018061811,4.7500 2018061812,4.6250 2018061813,4.5000 2018061814,4.2500 2018061815,3.7500 2018061816,3.3750 2018061817,3.2500 2018061818,3.1250 2018061819,3.0000 2018061820,3.1250 2018061821,3.2500 2018061822,3.3750 2018061823,3.3750 2018061900,3.5000 2018061901,3.3750 2018061902,4.3750 2018061903,5.8750 2018061904,5.8750 2018061905,5.3750 2018061906,4.7500 2018061907,3.6250 2018061908,3.5000 2018061909,2.6250 2018061910,3.0000 2018061911,2.5000 2018061912,2.0000 2018061913,1.3750 2018061914,0.5000 2018061915,-0.2500 2018061916,-0.5000 2018061917,0.6250 2018061918,2.2500 2018061919,2.0000 2018061920,2.1250 2018061921,2.1250 2018061922,2.7500 2018061923,3.1250 2018062000,3.1250 2018062001,3.0000 2018062002,3.5000 2018062003,5.0000 2018062004,5.1250 2018062005,4.5000 2018062006,3.7500 2018062007,3.2500 2018062008,3.3750 2018062009,2.8750 2018062010,2.7500 2018062011,2.5000 2018062012,1.8750 2018062013,1.2500 2018062014,0.3750 2018062015,0.1250 2018062016,0.5000 2018062017,1.8750
Looks like you have a list of datetime object. You can use the datetime module to convert it to your required format. Ex: import datetime data = "2018061402" print( datetime.datetime.strptime(data[:-2], "%Y%m%d").strftime("%Y-%m-%d") ) Output: 2018-06-14
insert a list 2xn obtained from a json in python
Hi I'm trying to access a json to save it in a list to perform a sort of append and create a pdf in ReportLab, I have the following code but I have several problems the first is that I would like to have a list of 2xn to always it has columns and rows be dynamic according to the json. If anyone can help me be grateful much import json json_data = [] attributesName = [] testTable = { "attributes":[] } attributesValue = [] path="prueba2.pdf" doc = SimpleDocTemplate(path, pagesize=letter) styleSheet = getSampleStyleSheet() text = [] with open("prueba.json") as json_file: document = json.load(json_file) for item in document: for data_item in item['data']: attributesName.append([str(data_item['name']) attributesValue.append([data_item['value']]) testTable[attributesName].extend({data_item['name'], data_item['value']}) print attributesName[0] print testTable[0] parts = [] p = Paragraph('''<para align=left fontsize=9>{0}</para>'''.format(text), styleSheet["BodyText"]) parts.append(p) doc.build(parts) I implemented the following,but it prints the list [[['RFC', 'NOMBRE', 'APELLIDO PATERNO', 'APELLIDO MATERNO', 'FECHA NACIMIENTO', 'CALLE', 'No. EXTERI OR', 'No. INTERIOR', 'C.P.', 'ENTIDAD', 'MUNICIPIO', 'COLONIA', 'DOCUMENTO']], [['MORR910304FL2', 'R JOSE', 'MONTIEL', 'ROBLES', '1992-02-04', 'AMOR', '4', '2', '55064', 'EDO DE MEX', 'ECATEPEC', 'INDUSTRIAL', 'Documento']]] I want some like this [['RFC'], ['22232446']] [['NOMBRE'], ['22239952']] [['APELLIDO'], ['22245430']]
if you change your code with the next code with open("prueba.json") as json_file: document = json.load(json_file) for item in document: for data_item in item['data']: attributesName.append(str(data_item["name"])) attributesValue.append(str(data_item["value"])) tabla.append([[attributesName],[attributesValue]]) print attributesName print attributesValue for Y in tabla: print(Y)