Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 2 years ago.
Improve this question
I want to loop through this csv that has country, data, and a number I need to extract. The file looks like this:
b'/O_o/\ngoogle.visualization.Query.setResponse({"version":"0.6","reqId":"0output=csv","status":"ok","sig":"1241529276","table":{"cols":[{"id":"A","label":"Entity","type":"string"},{"id":"B","label":"Week","type":"number","pattern":"General"},{"id":"C","label":"Day","type":"date","pattern":"yyyy-mm-dd"},{"id":"D","label":"Flights
2019
(Reference)","type":"number","pattern":"General"},{"id":"E","label":"Flights","type":"number","pattern":"General"},{"id":"F","label":"%
vs 2019
(Daily)","type":"number","pattern":"General"},{"id":"G","label":"Flights
(7-day moving
average)","type":"number","pattern":"General"},{"id":"H","label":"% vs
2019 (7-day Moving
Average)","type":"number","pattern":"General"},{"id":"I","label":"Day
2019","type":"date","pattern":"yyyy-mm-dd"},{"id":"J","label":"Day
Previous
Year","type":"date","pattern":"yyyy-mm-dd"},{"id":"K","label":"Flights
Previous
Year","type":"number","pattern":"General"}],"rows":[{"c":[{"v":"Albania"},{"v":36.0,"f":"36"},{"v":"Date(2020,8,1)","f":"2020-09-01"},{"v":129.0,"f":"129"},{"v":64.0,"f":"64"},{"v":-0.503875968992248,"f":"-0,503875969"},{"v":71.5714285714286,"f":"71,57142857"},{"v":-0.291371994342291,"f":"-0,2913719943"},{"v":"Date(2019,8,3)","f":"2019-09-03"},{"v":"Date(2019,8,3)","f":"2019-09-03"},{"v":129.0,"f":"129"}]},{"c":[{"v":"Albania"},{"v":36.0,"f":"36"},{"v":"Date(2020,8,2)","f":"2020-09-02"},{"v":92.0,"f":"92"},{"v":59.0,"f":"59"},{"v":-0.358695652173913,"f":"-0,3586956522"},{"v":70.0,"f":"70"},{"v":-0.300998573466476,"f":"-0,3009985735"},{"v":"Date(2019,8,4)","f":"2019-09-04"},{"v":"Date(2019,8,4)","f":"2019-09-04"},{"v":92.0,"f":"92"}]},{"c":[{"v":"Albania"},{"v":36.0,"f":"36"},{"v":"Date(2020,8,3)","f":"2020-09-03"},{"v":96.0,"f":"96"},{"v":67.0,"f":"67"},{"v":-0.302083333333333,"f":"-0,3020833333"},{"v":70.1428571428571,"f":"70,14285714"},{"v":-0.30354609929078,"f":"-0,3035460993"},{"v":"Date(2019,8,5)","f":"2019-09-05"},{"v":"Date(2019,8,5)","f":"2019-09-05"},{"v":96.0,"f":"96"}]},{"c":[{"v":"Albania"},{"v":36.0,"f":"36"},{"v":"Date(2020,8,4)","f":"2020-09-04"},{"v":103.0,"f":"103"},{"v":89.0,"f":"89"},{"v":-0.135922330097087,"f":"-0,1359223301"},{"v":69.2857142857143,"f":"69,28571429"},{"v":-0.312056737588652,"f":"-0,3120567376"},{"v":"Date(2019,8,6)","f":"2019-09-06"},{"v":"Date(2019,8,6)","f":"2019-09-06"},{"v":103.0,"f":"103"}]},{"c":[{"v":"Albania"},{"v":36.0,"f":"36"},{"v":"Date(2020,8,5)","f":"2020-09-05"},{"v":94.0,"f":"94"},{"v":53.0,"f":"53"},{"v":-0.436170212765957,"f":"-0,4361702128"},{"v":68.8571428571429,"f":"68,85714286"},{"v":-0.314366998577525,"f":"-0,3143669986"},{"v":"Date(2019,8,7)","f":"2019-09-07"},{"v":"Date(2019,8,7)","f":"2019-09-07"},{"v":94.0,"f":"94"}]}, ...
In there it says Albania, which is a country with data I need to extract. For example:
{"c":[{"v":"Albania"},{"v":36.0,"f":"36"},{"v":"Date(2020,8,4)","f":"2020-09-04"},{"v":103.0,"f":"103"},{"v":89.0,"f":"89"},{"v":-0.135922330097087,"f":"-0,1359223301"},{"v":69.2857142857143,"f":"69,28571429"},{"v":-0.312056737588652,"f":"-0,3120567376"},{"v":"Date(2019,8,6)","f":"2019-09-06"},{"v":"Date(2019,8,6)","f":"2019-09-06"},{"v":103.0,"f":"103"}]}
How would I write a python script to loop over the entire csv file and find every occurrence of the word "Albania", save it, then go a little further and get the date "2020-09-04", and then get the number -0.1359?
You can read this using json.
import json
with open('txtfile1.txt') as input:
data = input.read()
#Select the part where the dictionary start (after "rows":)
nesteddict = json.loads(data[(data.find('rows')+6):])
finallist = []
for x in nesteddict:
sublist = []
sublist.append(x['c'][0]['v'])
sublist.append(x['c'][2]['f'])
sublist.append(x['c'][5]['v'])
finallist.append(sublist)
This will output
[['Albania', '2020-09-01', -0.503875968992248], ['Albania', '2020-09-02', -0.358695652173913], ['Albania', '2020-09-03', -0.302083333333333], ['Albania', '2020-09-04', -0.135922330097087], ['Albania', '2020-09-05', -0.436170212765957]]
Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 7 years ago.
Improve this question
I'm trying to pull rows from a database. It pulls the first two rows however will not pull out rows 6 and 7, and it's saying this error: tuple index out of range.
db = sqlite3.connect('da_destination_history')
cursor = db.cursor()
cursor.execute('''SELECT time, dest_lat, dest_lng, source_lat, source_lng FROM destination_history''')
rows = cursor.fetchall()
for row in rows:
print('{0} : {1}, {2}'.format(row[0], float(row[1])/1000000, float(row[2])/1000000))
print('{0} : {6}, {7}'.format(row[0], float(row[6])/1000000, float(row[7])/1000000))
ttime = row[0]
dlong = float(row[1])/1000000
dlat = float(row[2])/1000000
kml = simplekml.Kml()
kml.newpoint(name="andriod2", coords=[((float(row[2])/1000000),(float(row[1])/1000000))])
kml.newpoint(name="andriod", coords=[((float(row[7])/1000000),(float(row[6])/1000000))])
kml.save("andriod.kml")
As Martijn indicated the indexing of row[6] looks suspicious as you only select 5 columns.
There is also a problem with this format function on the string:
'{0} : {6}, {7}'.format(row[0], float(row[6])/1000000, float(row[7])/1000000)
as 6 and 7 between {} indicate the argument to format() and you provide only 3 arguments (indexed with {0}, {1} resp. {2}
If you copied this code from some example with more columns selected, you should make sure you update all indices, both in row, as well as in the format instructions.