পাইথন ব্যবহার করে কোনও ফাইলে প্রিটি-প্রিন্ট জেএসওএন ডেটা


111

শ্রেণীর জন্য একটি প্রকল্পে টুইটার জেএসওএন ডেটা পার্স করা জড়িত। আমি ডেটা পেয়েছি এবং খুব ঝামেলা ছাড়াই ফাইলটিতে এটি সেট করছি, তবে এটি সবই এক লাইনে রয়েছে in আমি যে ডেটা ম্যানিপুলেশনটি করার চেষ্টা করছি তার জন্য এটি ঠিক আছে, তবে ফাইলটি হাস্যকরভাবে পড়া খুব শক্ত এবং আমি এটি খুব ভাল করে পরীক্ষা করতে পারি না, ডেটা ম্যানিপুলেশন অংশের জন্য কোড রাইটিংটি খুব কঠিন করে তোলে।

পাইথনের মধ্যে থেকে কীভাবে এটি করা যায় তা কি কেউ জানেন (অর্থাত্ কমান্ড লাইন সরঞ্জামটি ব্যবহার না করা, যা আমি কাজ করতে পারি না)? এখন পর্যন্ত আমার কোডটি এখানে:

header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "wb")
# magic happens here to make it pretty-printed
twitterDataFile.write(output)
twitterDataFile.close()

দ্রষ্টব্য আমি সাধারণ মানুষকে সরলজসন ডকুমেন্টেশন এবং এ জাতীয় প্রতিশ্রুতি দেওয়ার জন্য প্রশংসা করি, তবে আমি যেমন বলেছি, আমি ইতিমধ্যে এটি দেখেছি এবং সহায়তার প্রয়োজন অব্যাহত রেখেছি। সত্যই সহায়ক জবাব সেখানে পাওয়া উদাহরণগুলির চেয়ে আরও বিশদ এবং ব্যাখ্যাযোগ্য হবে। ধন্যবাদ

এছাড়াও: উইন্ডোজ কমান্ড লাইনে এটি ব্যবহার করে:

more twitterData.json | python -mjson.tool > twitterData-pretty.json

এর ফলাফল:

Invalid control character at: line 1 column 65535 (char 65535)

আমি যে ডেটা ব্যবহার করছি তা আমি আপনাকে দেব তবে এটি খুব বড় এবং আপনি ফাইলটি তৈরি করার জন্য কোডটি ইতিমধ্যে দেখেছেন।


1
আমি সন্দেহ করি আপনি আসলে বাইনারি ডেটা ("wb") লিখতে চান
হামিশ

আমাকে উইন্ডোজ মেশিনগুলির জন্য এটি প্রয়োজনীয় ছিল তা শেখানো হয়েছিল এবং এখন পর্যন্ত আমার সমস্ত কার্যভারের জন্য এটি কাজ করেছে। কেন এটি ভুল হতে পারে সে সম্পর্কে আপনি যদি ডকুমেন্টেশন অফার করতে পারেন তবে আমি এটি দেখে খুশি হব।
জেলবিনিয়

এটি কেবল তখনই প্রয়োজনীয় যদি আপনি বাইনারি ফাইলগুলি বা অন্যান্য ক্ষেত্রে যেখানে লাইন শেষের নির্দিষ্ট ফর্ম (যেমন \r\nবনাম \n) গুরুত্বপূর্ণ তা নিয়ে কাজ করছেন। স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / ৩২২7878696969/২ দেখুন । আপনার ক্ষেত্রে, আপনি উইন্ডোজ বন্ধুত্বপূর্ণ লাইন শেষ করতে চান, তবে আপনি এটি টুইটারের শেষ প্রান্ত থেকে পাবেন না, তাই আপনার পাঠ্য মোডে খোলা উচিত।
হামিশ

এটা কি তোমার প্রশ্নের উত্তর? কিভাবে একটি JSON ফাইল প্রশংসাপত্র?
wesinat0r

উত্তর:


102

আপনার theচ্ছিক যুক্তি ব্যবহার করা উচিত indent

header, output = client.request(twitterRequest, method="GET", body=None,
                            headers=None, force_auth_header=True)

# now write output to a file
twitterDataFile = open("twitterData.json", "w")
# magic happens here to make it pretty-printed
twitterDataFile.write(simplejson.dumps(simplejson.loads(output), indent=4, sort_keys=True))
twitterDataFile.close()

1
আপনাকে ধন্যবাদ, যে পুরোপুরি কাজ করেছে । "সর্ট_কিজ" কেন সেখানে থাকা দরকার তা আপনি ব্যাখ্যা করতে পারেন?
জেলবিনিয়

1
এটি সেখানে থাকার দরকার নেই তবে এটি জিনিসগুলিকে খুব সুন্দর এবং বর্ণমালা অনুসারে বাছাই করে তোলে। আমি যখন মানুষের পাঠযোগ্য আউটপুট চাই তখন আমি এটি ব্যবহার করার প্রবণতা রাখি।
mattbornski

4
সুস্পষ্টভাবে ধন্যবাদ আপনাকে ধন্যবাদ - যাইহোক একটি & $ & # হওয়ার চেষ্টা না করে তবে ফাইল লেখার জন্য খোলা / কাছাকাছি উত্সাহিত হয় না, কাঠামোটি সহ সাধারণত পছন্দনীয়: with open("name_of_file.json", "w") as f: f.write(my_formatted_json_var) সুবিধা হ'ল নিশ্চিত যে ফাইলটি বন্ধ হয়ে যাবে, বড় স্নিপকেটে বলুন ...
লজিকঅ্যানস্ট্রাকশন

withবাক্যবিন্যাস অবশ্যই স্পষ্টভাবে সুন্দর, তবে আমি আমার শ্রোতাদের কাছে আমার উত্তরগুলি স্কেল করার চেষ্টা করি
mattbornski

73

আপনি জেএসএনকে বিশ্লেষণ করতে পারেন, তারপরে এ জাতীয় ইনডেন্ট দিয়ে আবার আউটপুট করুন:

import json
mydata = json.loads(output)
print json.dumps(mydata, indent=4)

আরও তথ্যের জন্য http://docs.python.org/library/json.html দেখুন ।


@ জেলবিনিয়ান: হ্যাঁ এটি সিম্পলসনের জন্যও কাজ করে। এখানে একবার
রানরাগ

এটি একটি খালি ফাইলের ফলাফল। header, output = client.request(twitterRequest, method="GET", body=None, headers=None, force_auth_header=True) twitterDataFile = open("twitterData.json", "wb") json.dumps(json.loads(output), twitterDataFile, indent=4) twitterDataFile.close()
জেলবিনিয়

5
@ জেলবিনিয়ান - json.dumpsএকটি স্ট্রিং প্রদান করে। json.dumpএকটি ফাইল লিখুন।
dkines

64
import json

with open("twitterdata.json", "w") as twitter_data_file:
    json.dump(output, twitter_data_file, indent=4, sort_keys=True)

আপনি json.dumps()যদি পরে স্ট্রিংটি বিশ্লেষণ করতে না চান তবে আপনার প্রয়োজন হবে না, কেবল সহজভাবে ব্যবহার করুন json.dump()। এটা খুব দ্রুত।


14

আপনি সুন্দর মুদ্রণের জন্য পাইথনের জসন মডিউল ব্যবহার করতে পারেন ।

>>> import json
>>> print json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
{
    "4": 5,
    "6": 7
}

সুতরাং, আপনার ক্ষেত্রে

>>> print json.dumps(json_output, indent=4)

সেই রুটটি চেষ্টা করেছিলাম এবং দুর্ভাগ্যক্রমে সেইভাবে কাজ করে না যা আপনি ভাবেন।
জেলবিনিয়

@ জেলবিনিয়: আপনি কী বলতে চাইছেন এক্সটাকি doesn't work as well?
রানরাগ

1
এটি প্রিন্টেড মুদ্রিত জসন সিনট্যাক্সের পরিবর্তে পাইথন ডিক সিনট্যাক্স হিসাবে দেখা যাচ্ছিল তাতে একক লাইনে ডেটা আউটপুট করা হয়েছিল
জেলবিনিয়

আপনার প্রশ্নের আউটপুটটিকে সম্পাদনা হিসাবে অন্তর্ভুক্ত করুন o সুতরাং, আমরা এটি দেখতে পারি।
রানরাগ

এটি ব্যবহার করে অ্যারেগুলি প্রতিটি মানের অনেকগুলি লাইন হিসাবে তালিকাভুক্ত করা হয়, অ্যারেটিকে এক লাইনে রাখা ভাল।
স্কেপ

4

আপনার কাছে ইতিমধ্যে বিদ্যমান জেএসএন ফাইল রয়েছে যা আপনি সুন্দর ফর্ম্যাট করতে চান আপনি এটি ব্যবহার করতে পারেন:

    with open('twitterdata.json', 'r+') as f:
        data = json.load(f)
        f.seek(0)
        json.dump(data, f, indent=4)
        f.truncate()

3

আপনি যদি নতুন * .json তৈরি করছেন বা বিদ্যমান জসন ফাইলটি পরিবর্তন করছেন তবে সুন্দর ভিউ জেসন ফর্ম্যাটটির জন্য "ইনডেন্ট" পরামিতিটি ব্যবহার করুন।

import json
responseData = json.loads(output)
with open('twitterData.json','w') as twitterDataFile:    
    json.dump(responseData, twitterDataFile, indent=4)

1
import json
def writeToFile(logData, fileName, openOption="w"):
  file = open(fileName, openOption)
  file.write(json.dumps(json.loads(logData), indent=4)) 
  file.close()  

এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে ।
Tân

-2

আপনি অজগর থেকে একটি ফাইল পুনর্নির্দেশ করতে পারেন এবং সরঞ্জামটি ব্যবহার করে খুলতে এবং আরও পড়তে পড়তে পারেন।

নমুনা কোডটি হবে,

cat filename.json | python -m json.tool | more
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.