সিএসভি ফাইলে পাইথনের তালিকাগুলির তালিকা লেখা


168

আমার কাছে নীচের ফর্মগুলির তালিকার একটি দীর্ঘ তালিকা রয়েছে ---

a = [[1.2,'abc',3],[1.2,'werew',4],........,[1.4,'qew',2]]

উদাহরণস্বরূপ তালিকার মানগুলি বিভিন্ন ধরণের - ফ্লোট, ইনট, স্ট্রিংস। আমি কীভাবে এটি কোনও সিএসভি ফাইলে লিখব যাতে আমার আউটপুট সিএসভি ফাইলটি দেখতে লাগে

1.2,abc,3
1.2,werew,4
.
.
.
1.4,qew,2

উত্তর:


299

পাইথনের অন্তর্নির্মিত সিএসভি মডিউল সহজেই এটি পরিচালনা করতে পারে:

import csv

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(a)

এটি ধরে নিয়েছে যে আপনার তালিকাটি যেমন aআপনার প্রশ্নে রয়েছে তেমন সংজ্ঞা দেওয়া হয়েছে। csv.writer()উপরে লিঙ্কিত লাইব্রেরি রেফারেন্স পৃষ্ঠাতে নথিভুক্ত হিসাবে আপনি বিভিন্ন alচ্ছিক পরামিতিগুলির মাধ্যমে আউটপুট সিএসভি-র সঠিক ফর্ম্যাটটি টুইচ করতে পারেন ।

পাইথন 3 এর জন্য আপডেট

import csv

with open("out.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(a)

88
পাইথন 3 সামঞ্জস্যের জন্য, "ডাব্লু ডাব্লু" থেকে "বি" সরান।
ভ্লাদ ভি

28
পাইথন 3 সহ - খোলা ('আউটপুট.সিএসভি', 'ডাব্লু', নিউলাইন = '')। আমি যদি নতুন লাইন প্যারামিটার বাদ দিই তবে আমি একটি অতিরিক্ত লাইন পাই। docs.python.org/3/library/csv.html#csv.writer
স্পা

1
পাইথন 3 এ আমাকে ওপেন ('আউটপুট সিএসভি', 'ডাব্লু', নিউলাইন = "") ব্যবহার করতে হয়েছিল
টিম মট্রাম

1
বাহ যে অজগর 3 ত্রুটি খুব অসহায়। ধন্যবাদ @ ভ্ল্যাডভি (একটি বাইট-এর মতো অবজেক্ট প্রয়োজন, 'আরআর' নয়)। এটি কিন্ডা অন্ধকারের দৃষ্টিতে উপলব্ধি করে তবে কোথায় কোথায় তাকানো যায় তার তথ্যমূলক নয়।
রামবাতিনো

1
@ টাল্লকো সম্ভবত এটির অর্থ হল আপনি পাইথন 2 ব্যবহার করছেন, সেক্ষেত্রে আপনার দ্বিতীয়টির চেয়ে প্রথম কোড ব্লকটি ব্যবহার করা উচিত। (এটিরও অর্থ হল আপনার পাইথন 3 এ স্যুইচ করা বিবেচনা করা উচিত))
অ্যাম্বার

35

আপনি ব্যবহার করতে পারেন pandas:

In [1]: import pandas as pd

In [2]: a = [[1.2,'abc',3],[1.2,'werew',4],[1.4,'qew',2]]

In [3]: my_df = pd.DataFrame(a)

In [4]: my_df.to_csv('my_csv.csv', index=False, header=False)

আমি মনে করি না pandasবিল্ট-ইন লাইব্রেরি csvএটি করতে পারলে ব্যবহার করা উচিত ।
সিমিন জি

6
আমি
পান্ডাস

9
পান্ডাস শক্তিশালী, অবশ্যই, তবে আমি পাশের কোনার দোকানে গাড়ি চালানোর জন্য ম্যাকলারেন ব্যবহার করব না।
এমআই রাইট

30
import csv
with open(file_path, 'a') as outcsv:   
    #configure writer to write standard csv file
    writer = csv.writer(outcsv, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
    writer.writerow(['number', 'text', 'number'])
    for item in list:
        #Write item to outcsv
        writer.writerow([item[0], item[1], item[2]])

অফিসিয়াল ডক্স: http://docs.python.org/2/library/csv.html


1
আপনি কিছু মন্তব্য দিয়ে আপনার উত্তরটি ব্যাখ্যা করতে পারলে এটি আমার +1 পাবে।
বুরহান খালিদ

3
writerowএকাধিক যুক্তি গ্রহণ করে না।
অ্যাম্বার

1
>>> w.writerow ("a", "b", "c") ট্রেসব্যাক (সর্বশেষতম কল শেষ): ফাইল "<stdin>", লাইন 1, <মডুল> টাইপ এরর: লেখক () ঠিক একটি যুক্তি নিয়েছে (3 প্রদত্ত)
অ্যাম্বার

@ অ্যাম্বার আপনি অজগরটির কোন সংস্করণ ব্যবহার করেন?
দিমিত্রি জাগরুলকিন

4
অ্যাম্বার আমাকে ক্ষমা করবেন আমি মিস করেছি []
দিমিত্রি জাগোরুলকিন

11

কারনের জন্য আপনি (মত একটি মডিউল ব্যবহার না করেই নিজে করতে চেয়েছিলেন csv, pandas, numpyইত্যাদি):

with open('myfile.csv','w') as f:
    for sublist in mylist:
        for item in sublist:
            f.write(item + ',')
        f.write('\n')

অবশ্যই, আপনার নিজের সংস্করণটি ঘূর্ণায়মান ত্রুটি-ঝুঁকিমূলক এবং অদক্ষ হতে পারে ... এজন্য সাধারণত এর জন্য একটি মডিউল রয়েছে। তবে কখনও কখনও আপনার নিজের লেখা আপনাকে কীভাবে কাজ করে তা বুঝতে সাহায্য করতে পারে এবং কখনও কখনও এটি আরও সহজ।


11

আমার খুব বড় তালিকায় csv.writer ব্যবহার করা বেশ সময় নিয়েছিল। আমি পান্ডা ব্যবহার করার সিদ্ধান্ত নিয়েছি, এটি নিয়ন্ত্রণ এবং বোঝার পক্ষে আরও দ্রুত এবং সহজ ছিল:

 import pandas

 yourlist = [[...],...,[...]]
 pd = pandas.DataFrame(yourlist)
 pd.to_csv("mylist.csv")

ভাল সিএসভি ফাইল তৈরি করতে আপনি কিছুটা পরিবর্তন করতে পারেন:

 yourlist = [[...],...,[...]]
 columns = ["abcd","bcde","cdef"] #a csv with 3 columns
 index = [i[0] for i in yourlist] #first element of every list in yourlist
 not_index_list = [i[1:] for i in yourlist]
 pd = pandas.DataFrame(not_index_list, columns = columns, index = index)

 #Now you have a csv with columns and index:
 pd.to_csv("mylist.csv")

5

অ্যাম্বারসের সমাধানটি ন্যালি অ্যারেগুলির জন্যও ভাল কাজ করে:

from pylab import *
import csv

array_=arange(0,10,1)
list_=[array_,array_*2,array_*3]
with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(list_)

4

আপনি যদি এর csvজন্য মডিউলটি আমদানি করতে না চান তবে আপনি কেবল পাইথন বিল্ট-ইনগুলি ব্যবহার করে কোনও CSV ফাইলে তালিকার একটি তালিকা লিখতে পারেন

with open("output.csv", "w") as f:
    for row in a:
        f.write("%s\n" % ','.join(str(col) for col in row))

3

lineterinator='\n'লেখক তৈরি করার সময় অবশ্যই তা নিশ্চিত করুন ; অন্যথায়, ডেটা উত্সগুলি যখন অন্য সিএসভি ফাইল থেকে আসে তখন প্রতিটি ডেটা লাইনের পরে একটি অতিরিক্ত খালি লাইন ফাইলে লেখা যেতে পারে ...

এখানে আমার সমাধান:

with open('csvfile', 'a') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter='    ',quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
for i in range(0, len(data)):
    spamwriter.writerow(data[i])

3

আচারে তালিকার তালিকাটি ফেলা এবং আচার মডিউলটি দিয়ে এটি পুনরুদ্ধার সম্পর্কে কীভাবে ? এটি বেশ সুবিধাজনক।

>>> import pickle
>>> 
>>> mylist = [1, 'foo', 'bar', {1, 2, 3}, [ [1,4,2,6], [3,6,0,10]]]
>>> with open('mylist', 'wb') as f:
...     pickle.dump(mylist, f) 


>>> with open('mylist', 'rb') as f:
...      mylist = pickle.load(f)
>>> mylist
[1, 'foo', 'bar', {1, 2, 3}, [[1, 4, 2, 6], [3, 6, 0, 10]]]
>>> 

0

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

 with open(strFileName, "w") as f:
    writer = csv.writer(f, delimiter=',',  quoting=csv.QUOTE_MINIMAL)
    writer.writerows(result)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.