calling values from a json file like a dictionary - python
Warning: beginner here:
So I am reading in a text file that is in the form of a json file. Since the son file is just like a dictionary I want to address parts of the json like I would a dictionary but I don't know how to do this. This is the little bit of what i have:
code:
with open("trump.txt","r") as lines:
for line in lines:
print(line)
what this prints:
{"created_at":"Wed Sep 27 01:19:39 +0000 2017","id":912849180741087232,"id_str":"912849180741087232","text":"RT #TheRickWilson: I see the clickservatives are out in force screaming there were special circumstances in AL.\n\nYes, it's because Trump ca\u2026","source":"\u003ca href=\"http://twitter.com/download/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":66914769,"id_str":"66914769","name":"Kathy","screen_name":"mydoggigi","location":"Earth","url":null,"description":"Love politics, Grandchildren & PSU #StillWithHer #NotMyPresident Blocked by Susan Sarandon, Glenn Greenwald, Joel Osteen and Joe Scarborough!!\ud83d\ude0e #TheResistance","translator_type":"none","protected":false,"verified":false,"followers_count":5878,"friends_count":5973,"listed_count":143,"favourites_count":110285,"statuses_count":138191,"created_at":"Wed Aug 19 04:55:41 +0000 2009","utc_offset":-14400,"time_zone":"Eastern Time (US & Canada)","geo_enabled":true,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_link_color":"1DA1F2","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"profile_image_url":"http://pbs.twimg.com/profile_images/903412377424732160/NqCfPFiB_normal.jpg","profile_image_url_https":"https://pbs.twimg.com/profile_images/903412377424732160/NqCfPFiB_normal.jpg","profile_banner_url":"https://pbs.twimg.com/profile_banners/66914769/1504225271","default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Wed Sep 27 01:08:45 +0000 2017","id":912846439964987392,"id_str":"912846439964987392","text":"I see the clickservatives are out in force screaming there were special circumstances in AL.\n\nYes, it's because Trump can't deliver. Sad!","source":"\u003ca href=\"http://twitter.com/download/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":19084896,"id_str":"19084896","name":"Rick Wilson","screen_name":"TheRickWilson","location":"Florida and points beyond","url":"http://facebook.com/therickwilson","description":"GOP Media Guy, Dad, Husband, Pilot, Hunter, Writer. I make ads and do politics. Daily Beast columnist. Everything Trump Touches Dies.","translator_type":"none","protected":false,"verified":true,"followers_count":238578,"friends_count":3518,"listed_count":4235,"favourites_count":48094,"statuses_count":250609,"created_at":"Fri Jan 16 20:50:17 +0000 2009","utc_offset":-14400,"time_zone":"America/New_York","geo_enabled":false,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"1A1B1F","profile_background_image_url":"http://pbs.twimg.com/profile_background_images/220716353/Firefox_Wallpaper.jpg","profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/220716353/Firefox_Wallpaper.jpg","profile_background_tile":true,"profile_link_color":"445555","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"252429","profile_text_color":"666666","profile_use_background_image":true,"profile_image_url":"http://pbs.twimg.com/profile_images/813585115934658560/gnuRozoD_normal.jpg","profile_image_url_https":"https://pbs.twimg.com/profile_images/813585115934658560/gnuRozoD_normal.jpg","profile_banner_url":"https://pbs.twimg.com/profile_banners/19084896/1504722796","default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"quote_count":5,"reply_count":50,"retweet_count":100,"favorite_count":456,"entities":{"hashtags":[],"urls":[],"user_mentions":[],"symbols":[]},"favorited":false,"retweeted":false,"filter_level":"low","lang":"en"},"is_quote_status":false,"quote_count":0,"reply_count":0,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"TheRickWilson","name":"Rick Wilson","id":19084896,"id_str":"19084896","indices":[3,17]}],"symbols":[]},"favorited":false,"retweeted":false,"filter_level":"low","lang":"en","timestamp_ms":"1506475179263"}
so how can i do something as simple as something below in my code?
dict["created_at"]="Wed Sep 27 01:19:39 +0000 2017"
Try this:
import json
with open('file.json') as file:
data = json.load(file)
#code
Related
Create xml from text file
I have a process that generates a text file. The contents of the file will change depending on whether the processes are active/not active. I need to dynamically convert it to xml. The contents of the text file are more Systemlog.txt GetProcessList OK name, description, dispstatus, textstatus, starttime, elapsedtime, pid disp+work, Dispatcher, GREEN, Running, 2023 01 09 05:22:23, 413:28:11, 25628 igswd_mt, IGS Watchdog, GREEN, Running, 2023 01 09 05:22:23, 413:28:11, 25629 gwrd, Gateway, GREEN, Running, 2023 01 09 05:22:24, 413:28:10, 25647 icman, ICM, GREEN, Running, 2023 01 09 05:22:24, 413:28:10, 25648 the code should automaitcally pick up the status like green or not green from the txt file.
How to split up git log output into a list of commits in python? [duplicate]
This question already has answers here: Python RE library String Split but keep the delimiters/separators as part of the next string (2 answers) Closed 5 months ago. Given git log output like such: commit 19e0f017ac832238f5a800dd3ea7a5966b3c1343 (HEAD -> master, origin/master, origin/HEAD) Author: Slim Shady Date: Sun Sep 18 19:53:42 2022 -0700 ci: remove debugging line github action script commit body commit ef82c672d21d70c43f0454b0b4d6fa22ef4ad0a9 (fix_release_action) Author: Slim Shady Date: Sun Sep 18 19:41:20 2022 -0700 feat: read and write IDs commit 8ee8fcbebcab76a2fbf0ee096a0d216e51fe2874 Author: Slim Shady Date: Sun Sep 18 17:41:03 2022 -0700 feat: new hook to allow custom tags I'd like that to turn into a list in python, with each element containing a single commit (including hash, author, body, etc.). I've tried using re.split(r"commit \w{40}", git_log), but it doesn't keep the hash in the output.
You could also use a positive lookahead to split your data. with open('git_log.txt', 'r') as f: data = f.read() res = list(filter(None, re.split(r"(?=commit \w{40})", data))) Output: [ 'commit 19e0f017ac832238f5a800dd3ea7a5966b3c1343 (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Slim Shady\nDate: Sun Sep 18 19:53:42 2022 -0700\n\n ci: remove debugging line github action script\n\n commit body\n\n', 'commit ef82c672d21d70c43f0454b0b4d6fa22ef4ad0a9 (fix_release_action)\nAuthor: Slim Shady\nDate: Sun Sep 18 19:41:20 2022 -0700\n\n feat: read and write IDs\n\n', 'commit 8ee8fcbebcab76a2fbf0ee096a0d216e51fe2874\nAuthor: Slim Shady\nDate: Sun Sep 18 17:41:03 2022 -0700\n\n feat: new hook to allow custom tags' ]
You need to put the split pattern in a capture group to allow it to be part of the output: # filter(None, ...) to remove empty strings >>> res = filter(None, re.split(r'(commit \w{40})', inp)) # Join items in group of two to handle the split between a commit line and rest of its body >>> output = ["".join(item) for item in zip(*[res] * 2)] >>> output [ 'commit 19e0f017ac832238f5a800dd3ea7a5966b3c1343 (HEAD -> master, origin/master, origin/HEAD)\nAuthor: Slim Shady\nDate: Sun Sep 18 19:53:42 2022 -0700\n\n ci: remove debugging line github action script\n\n commit body\n\n', 'commit ef82c672d21d70c43f0454b0b4d6fa22ef4ad0a9 (fix_release_action)\nAuthor: Slim Shady\nDate: Sun Sep 18 19:41:20 2022 -0700\n\n feat: read and write IDs\n\n', 'commit 8ee8fcbebcab76a2fbf0ee096a0d216e51fe2874\nAuthor: Slim Shady\nDate: Sun Sep 18 17:41:03 2022 -0700\n\n feat: new hook to allow custom tags' ] But if you do have control over the git log output, you could format it differently and parse it without regex: git log --pretty=format:'"%H"%x09"%an"%x09"%ad"%x09"%B"' > output.csv Then: >>> import csv >>> with open("output.csv") as f: ... items = list(csv.reader(f, delimiter='\t')) ... >>> items[0] ["19e0f017ac832238f5a800dd3ea7a5966b3c1343", "Slim Shady", "Sun Sep 18 19:53:42 2022 -0700", "ci: remove debugging line github action script"] Other option is to use libraries like https://gitpython.readthedocs.io/en/stable/ to get access to commits as Python objects you can access easily.
Python can't open JSON file, giving JSONDecodeError
I want to open a JSON file using Python in my project, but I constantly get the following error: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) This is the code: import json with open("../data.txt") as json_file: data = json.load(json_file) I have a really simple text file with JSON formatted data in it. This is the data.txt file: { "data": [ { "day": "22/04/2020 15:35", "viewcount": "1" }, { "day": "22/04/2020 20:51", "viewcount": "2" } ] }
I've tried your source code and the visible JSON data as is, it runs with no problems at all. I'd suggest checking the contents of file in binary form, e.g. by using a utility such as hexdump to see how it begins: $ hexdump data.txt 0000000 0a7b 2020 2020 6422 7461 2261 203a 5b20 0000010 200a 2020 2020 2020 2020 2020 2020 2020 0000020 2020 0a7b 2020 2020 2020 2020 2020 2020 ... Or use file utility to check the encoding as described in the following post: https://unix.stackexchange.com/questions/11602/how-can-i-test-the-encoding-of-a-text-file-is-it-valid-and-what-is-it
The python code was not the problem. The file was not saved in UTF-8 encoding, this was the problem.
Read specific part of json string with python
I am currently working on a programme within the django environment which operates off a json api provided by a third party. There is an object within that API which I want however the string of information it provides is too much for me. The data I want is the created_at tag from the twitter api using tweepy. This created_at contains data in the following format: "created_at": "Mon Aug 27 17:21:03 +0000 2012" This is all fine however this will return the date AND time whereas I simply want the the time part of the above example i.e. 17:21:03. Is there any way I can just take this part of the created_at response string and store it in a separate variable?
You can use the dateutil module from dateutil import parser created_at = "Mon Aug 27 17:21:03 +0000 2012" created_at = parser.parse(created_at) print created_at.time() Output: 17:21:03
Try below code. my_datetime = response_from_twitter['created_at'] my_time = my_datetime.split(' ')[3] # my_time will now contain time part.
You could just split the string into a list and take the 4th element: time = source['created_at'].split(' ')[3]
What about a regular expression with re.search(): >>> import re >>> d = {"created_at": "Mon Aug 27 17:21:03 +0000 2012"} >>> re.search('\d{2}:\d{2}:\d{2}', d['created_at']).group(0) '17:21:03'
auto-generation of python file info(author, create date etc.)
I'm using pydev in eclipse. When new a .py file, there will be file info(author, create date etc.)generated like below: """ Created on Fri Oct 10 13:50:18 2014 #author: XXXX """ How to change the format?
Window-Preferences-PyDev-Editor-Templates-Change your Empty template