পুরানো সিএসভি ফাইল পাইথনে নতুন সারি যুক্ত করুন


207

আমি আমার পুরানো সিএসভি ফাইলে একটি নতুন সারি যুক্ত করার চেষ্টা করছি। মূলত, পাইথন স্ক্রিপ্টটি চালানোর সময় এটি আপডেট হয় updated

এখনই আমি একটি তালিকায় পুরানো সিএসভি সারি মান সংরক্ষণ করছি এবং তারপরে সিএসভি ফাইলটি মুছে ফেলা এবং নতুন তালিকা মান সহ এটি আবার তৈরি করছি।

এটি করার আরও ভাল উপায় আছে তা জানতে চেয়েছিলেন।

উত্তর:


246
with open('document.csv','a') as fd:
    fd.write(myCsvRow)

'a'প্যারামিটার দিয়ে একটি ফাইল খোলার ফলে আপনি কেবল বিদ্যমান সামগ্রীতে ওভাররাইট না করে ফাইলটির শেষের দিকে সংযোজন করতে পারবেন। চেষ্টা কর.


2
আমি এফপি = খোলার (সিএসভি_ফাইলেপথের নাম, 'ওয়া') লেখক = সিএসভি.উইটার (এফপি) কিছু তালিকা = [3,56,3,6,56] Writer.writerow ((কিছু তালিকাভুক্ত)) চেষ্টা করেছি তবে কেবল শেষ সারিটি এতে যুক্ত হবে ফাইল।
লসপাল

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

152

আমি csvস্ট্যান্ডার্ড লাইব্রেরী এবং মডিউলটি ব্যবহার করে এই সমাধানটি পছন্দ করিwith ফাইলটি খোলা রেখে এড়াতে বিবৃতি ।

'a'আপনি ফাইলটি খোলার সময় মূল পয়েন্টটি অ্যাডিংয়ের জন্য ব্যবহার করা হচ্ছে ।

import csv   
fields=['first','second','third']
with open(r'name', 'a') as f:
    writer = csv.writer(f)
    writer.writerow(fields)

আপনি যদি পাইথন ২.7 ব্যবহার করে থাকেন তবে আপনি উইন্ডোজে অতিরিক্ত অতিরিক্ত নতুন লাইনের অভিজ্ঞতা পেতে পারেন। আপনি এই উইলের'ab' পরিবর্তে এগুলি ব্যবহার করার চেষ্টা করতে পারেন 'a'তবে যাইহোক, আপনাকে টাইপআরারের কারণ হতে পারে : পাইথনে str. str এবং সিএসভিতে পাইনের জন্য 'স্ট' নয়, বাইটস জাতীয় বস্তুর প্রয়োজন is newline=''নাতাচা যেমন পরামর্শ দেয় তে যোগ করার ফলে আপনি পাইথন 2 এবং 3 এর মধ্যে পশ্চাদপসারণের অসঙ্গতি সৃষ্টি করতে পারবেন


24

@ জিএম এর উত্তরের ভিত্তিতে এবং @ জন লা রুয়ের সতর্কতার প্রতি মনোযোগ দেওয়ার জন্য, আমি 'a'মোডে ফাইলটি খোলার মধ্যে একটি নতুন সারি যুক্ত করতে সক্ষম হয়েছি was

এমনকি উইন্ডোতেও, নতুন লাইনের সমস্যা এড়াতে আপনাকে অবশ্যই এটি হিসাবে ঘোষণা করতে হবে newline=''

এখন আপনি 'a'মোডে ফাইলটি খুলতে পারেন (খ ছাড়াই)।

import csv

with open(r'names.csv', 'a', newline='') as csvfile:
    fieldnames = ['This','aNew']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writerow({'This':'is', 'aNew':'Row'})

আমি নিয়মিত লেখকের সাথে (ডিক্ট ব্যতীত) চেষ্টা করি নি, তবে আমি মনে করি এটিও ঠিক হয়ে যাবে।


12

আপনি 'ডাব্লু' এর পরিবর্তে 'এ' মোড দিয়ে ফাইলটি খুলছেন?

পাইথন ডক্সে ফাইলগুলি পড়া এবং লেখার জন্য দেখুন

7.2। ফাইল পড়া এবং লেখা

ওপেন () একটি ফাইল অবজেক্ট ফিরিয়ে দেয় এবং দুটি আর্গুমেন্টের সাথে সর্বাধিক ব্যবহৃত হয়: খুলুন (ফাইলের নাম, মোড)।

>>> f = open('workfile', 'w')
>>> print f <open file 'workfile', mode 'w' at 80a0960>

প্রথম আর্গুমেন্টটি ফাইলের নামযুক্ত একটি স্ট্রিং। দ্বিতীয় যুক্তি হ'ল ফাইলটি কীভাবে ব্যবহৃত হবে সে সম্পর্কে বর্ণনা করে কয়েকটি অক্ষর যুক্ত স্ট্রিং। মোডটি 'আর' হতে পারে যখন ফাইলটি কেবল পঠিত হবে, কেবলমাত্র লেখার জন্য 'ডাব্লু' (একই নামের একটি বিদ্যমান ফাইলটি মুছে ফেলা হবে), এবং 'এ' যুক্ত করার জন্য ফাইলটি খুলবে; ফাইলটিতে লিখিত কোনও ডেটা স্বয়ংক্রিয়ভাবে শেষে যুক্ত হয়ে যায়। 'r +' ফাইল পড়া এবং লেখার জন্য উভয়ই খোলে। মোড আর্গুমেন্ট alচ্ছিক; 'আর' বাদ দিলে ধরে নেওয়া হবে।

উইন্ডোজে, মোডে সংযুক্ত 'বি' ফাইলটি বাইনারি মোডে খোলে, সুতরাং 'আরবি', 'ডাব্লুবি', এবং 'আর + বি' এর মতো মোডগুলিও রয়েছে। উইন্ডোজে পাইথন পাঠ্য এবং বাইনারি ফাইলগুলির মধ্যে পার্থক্য তৈরি করে; পাঠ্য ফাইলগুলিতে প্রান্তের অক্ষরের অক্ষরগুলি স্বয়ংক্রিয়ভাবে কিছুটা পরিবর্তিত হয় যখন ডেটা পড়া বা লেখা হয়। পর্দার আড়ালে থাকা এই ফাইলটি ডেটা ফাইলের জন্য সংশোধন করা ASCII পাঠ্য ফাইলগুলির জন্য ঠিক আছে, তবে এটি জেপিইজি বা এক্সই ফাইলগুলিতে বাইনারি ডেটাগুলিকে দূষিত করবে। এই জাতীয় ফাইলগুলি পড়তে এবং লেখার সময় বাইনারি মোড ব্যবহার করতে খুব সাবধান হন। ইউনিক্সে, মোডে 'বি' যুক্ত করতে ক্ষতি করে না, তাই আপনি সমস্ত বাইনারি ফাইলগুলির জন্য প্ল্যাটফর্ম-স্বতন্ত্রভাবে এটি ব্যবহার করতে পারেন।


হতে পারে আপনি নিজের উত্তরটি আরও বিস্তৃত করে তুলতে পারেন, তবে এটি একটি আসল উত্তরের মতো দেখাবে :-)
ব্যবহারকারী 702846

@ ব্যবহারকারী, আমি একটি লিঙ্ক যুক্ত করেছি - এটি আপনাকে সহায়তা করে?
জন লা রুই

7

যদি ফাইলটিতে উপস্থিত থাকে এবং এতে ডেটা থাকে, তবে স্বয়ংক্রিয়ভাবে fieldnameপ্যারামিটার তৈরি করা সম্ভব csv.DictWriter:

# read header automatically
with open(myFile, "r") as f:
    reader = csv.reader(f)
    for header in reader:
        break

# add row to CSV file
with open(myFile, "a", newline='') as f:
    writer = csv.DictWriter(f, fieldnames=header)
    writer.writerow(myDict)

6
# I like using the codecs opening in a with 
field_names = ['latitude', 'longitude', 'date', 'user', 'text']
with codecs.open(filename,"ab", encoding='utf-8') as logfile:
    logger = csv.DictWriter(logfile, fieldnames=field_names)
    logger.writeheader()

# some more code stuff 

    for video in aList:
        video_result = {}                                     
        video_result['date'] = video['snippet']['publishedAt']
        video_result['user'] = video['id']
        video_result['text'] = video['snippet']['description'].encode('utf8')
        logger.writerow(video_result) 

1
দয়া করে আপনার ইন্ডেন্টেশন ঠিক করুন। উত্তরগুলি একটি ব্যাখ্যা থেকেও উপকৃত হয় - এবং এই উত্তরগুলি আরও উত্সাহ আকর্ষণ করে।
মিঃ টি

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

2

.Csv ফাইলে একটি নতুন লাইন যুক্ত করার জন্য আমি এই পদ্ধতিতে করি:

pose_x = 1 
pose_y = 2

with open('path-to-your-csv-file.csv', mode='a') as file_:
    file_.write("{},{}".format(pose_x, pose_y))
    file_.write("\n")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.