পাইথন লাইনে সিএসভি লাইনে লিখুন


104

আমার কাছে এমন ডেটা রয়েছে যা HTTP অনুরোধের মাধ্যমে অ্যাক্সেস করা হচ্ছে এবং কমা দ্বারা পৃথক ফর্ম্যাটে সার্ভারের মাধ্যমে ফিরে পাঠানো হচ্ছে, আমার নিম্নলিখিত কোড রয়েছে:

site= 'www.example.com'
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
soup = soup.get_text()
text=str(soup)

পাঠ্যের বিষয়বস্তু নিম্নরূপ:

april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9

আমি কীভাবে এই ডেটাটি কোনও সিএসভি ফাইলে সংরক্ষণ করতে পারি। আমি জানি আমি রেখার দ্বারা লাইনটি পুনরাবৃত্তি করতে নিম্নলিখিত রেখার সাথে কিছু করতে পারি:

import StringIO
s = StringIO.StringIO(text)
for line in s:

তবে আমি নিশ্চিত না যে কীভাবে এখন প্রতিটি লাইন সিএসভিতে সঠিকভাবে লিখব

সম্পাদনা ---> মতামতের জন্য ধন্যবাদ যেমন প্রস্তাবিত সমাধানটি বরং সহজ ছিল এবং নীচে দেখা যায়।

সমাধান:

import StringIO
s = StringIO.StringIO(text)
with open('fileName.csv', 'w') as f:
    for line in s:
        f.write(line)

4
এটি ইতিমধ্যে একটি সিএসভি, আপনার কেবল প্রতিটি লাইন একটি ফাইলে লিখতে হবে ...
আইসডওয়াটার

4
আমি নিশ্চিত নই যে আপনার এমনকি আমদানিরও দরকার, সত্য কথা বলার StringIOজন্য। এছাড়াও, সমাধান হিসাবে সমাধান সম্ভবত রেখাগুলি আলাদা করে না, f.write()স্বয়ংক্রিয়ভাবে নতুন লাইনে যুক্ত হয় না।
আইসড ওয়াটার

@ জলযুক্ত আমি আপনার বক্তব্যটি বুঝতে পেরেছি তবে আমি উপরের কোডটি চালিয়েছি এবং এটি কোনও সিএসভি ফাইলে সঠিকভাবে ডেটা সঞ্চয় করতে সক্ষম হয়েছিল।
সরিষা বাঘ

উত্তর:


180

সাধারণ উপায়:

##text=List of strings to be written to file
with open('csvfile.csv','wb') as file:
    for line in text:
        file.write(line)
        file.write('\n')

বা

সিএসভি রাইটার ব্যবহার:

import csv
with open(<path to output_csv>, "wb") as csv_file:
        writer = csv.writer(csv_file, delimiter=',')
        for line in data:
            writer.writerow(line)

বা

সহজ উপায়:

f = open('csvfile.csv','w')
f.write('hi there\n') #Give your csv text here.
## Python will convert \n to os.linesep
f.close()

17
অজগর 3 এর জন্য, এটিকে পরিবর্তন করুনwith open(<path to output_csv>, "w", newline='') as csv_file:
খালেদ হামেদ

4
এই লাইনে তথ্য হারিয়েছে for line in data:। দয়া করে এটি ঠিক করুন। ধন্যবাদ.
ফ্রান্সিসকো মারিয়া কালিস্টো

@ গসমারস এই ধারণাটি সম্প্রদায়ের সহায়তা করা ছিল, আপনি সম্পাদনা এবং মন্তব্য ব্যর্থ হ'ল এটি অকেজো।
আনি মেনন

তৃতীয় সমাধানটি ব্যবহার করে সিএসভি-ফাইলে যদি ইতিমধ্যে কিছু থাকে তবে একটি লাইন সংযোজন করবেন কীভাবে?
জর্জেন কে।

4
@ জারজেনকে ব্যবহারের 'a'(append মুডে) এর জায়গায় 'w'(লেখার মোড)।
আনি মেনন

15

আপনি যে কোনও সাধারণ ফাইল লিখতে চাইলে আপনি কেবল ফাইলটিতে লিখতে পারেন।

with open('csvfile.csv','wb') as file:
    for l in text:
        file.write(l)
        file.write('\n')

যদি সেক্ষেত্রে এটি তালিকার একটি তালিকা হয় তবে আপনি সরাসরি অন্তর্নির্মিত csvমডিউলটি ব্যবহার করতে পারেন

import csv

with open("csvfile.csv", "wb") as file:
    writer = csv.writer(file)
    writer.writerows(text)

8

আমি কেবল প্রতিটি লাইনে একটি ফাইল লিখতে পারি, কারণ এটি ইতিমধ্যে CSV ফর্ম্যাটে রয়েছে:

write_file = "output.csv"
with open(write_file, "w") as output:
    for line in text:
        output.write(line + '\n')

এই মুহুর্তে লাইন-ব্রেকগুলির সাথে কীভাবে লাইনগুলি লিখতে হবে তা আমি মনে করতে পারি না, যদিও: পি

এছাড়াও, আপনি কটাক্ষপাত করা দেখতে পারেন এই উত্তরটি সম্পর্কে write(), writelines()এবং '\n'


4

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

class CSVWriter():

    filename = None
    fp = None
    writer = None

    def __init__(self, filename):
        self.filename = filename
        self.fp = open(self.filename, 'w', encoding='utf8')
        self.writer = csv.writer(self.fp, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL, lineterminator='\n')

    def close(self):
        self.fp.close()

    def write(self, elems):
        self.writer.writerow(elems)

    def size(self):
        return os.path.getsize(self.filename)

    def fname(self):
        return self.filename

ব্যবহারের উদাহরণ:

mycsv = CSVWriter('/tmp/test.csv')
mycsv.write((12,'green','apples'))
mycsv.write((7,'yellow','bananas'))
mycsv.close()
print("Written %d bytes to %s" % (mycsv.size(), mycsv.fname()))

আনন্দ কর


1

এই সম্পর্কে কি:

with open("your_csv_file.csv", "w") as f:
    f.write("\n".join(text))

str.join () একটি স্ট্রিং প্রত্যাবর্তনযোগ্য যা স্ট্রিংগুলির পুনরাবৃত্তিতে সংক্ষেপণ Return উপাদানগুলির মধ্যে বিভাজক হ'ল এই পদ্ধতিটি সরবরাহ করে।

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