সিএসভি ফাইলগুলি প্রক্রিয়াকরণের জন্য একটি শক্তিশালী কমান্ড লাইন সরঞ্জাম আছে?


47

আমি সিএসভি ফাইলগুলির সাথে কাজ করি এবং কখনও কখনও কমান্ড লাইন থেকে সারি বা কলামের সামগ্রীগুলি দ্রুত পরীক্ষা করা প্রয়োজন check অনেক ক্ষেত্রে cut, head, tail, এবং বন্ধুদের কাজ করবে; তবে কাটা সহজে যেমন পরিস্থিতি মোকাবেলা করতে পারে না

"this, is the first entry", this is the second, 34.5

এখানে, প্রথম কমাটি প্রথম ক্ষেত্রের অংশ, তবে cut -d, -f1একমত নয়। আমি নিজেই কোনও সমাধান লেখার আগে আমি ভাবছিলাম যে এই কাজের জন্য ইতিমধ্যে বিদ্যমান একটি ভাল সরঞ্জাম সম্পর্কে যদি কেউ জানতেন। এটি খুব কমপক্ষে, উপরের উদাহরণটি পরিচালনা করতে সক্ষম হবে এবং একটি সিএসভি ফর্ম্যাট করা ফাইল থেকে একটি কলাম ফিরিয়ে আনবে। অন্যান্য কাঙ্ক্ষিত বৈশিষ্ট্যগুলির মধ্যে প্রথম সারিতে প্রদত্ত কলামের নামগুলির উপর ভিত্তি করে কলামগুলি নির্বাচন করার ক্ষমতা, অন্যান্য উদ্ধৃতি শৈলীর জন্য সমর্থন এবং ট্যাব-বিচ্ছিন্ন ফাইলগুলির জন্য সমর্থন অন্তর্ভুক্ত।

আপনি যদি এই জাতীয় কোনও সরঞ্জাম সম্পর্কে জানেন না তবে বাশ, পার্ল বা পাইথন বা অন্যান্য সাধারণ স্ক্রিপ্টিং ভাষায় এই জাতীয় প্রোগ্রাম প্রয়োগের বিষয়ে পরামর্শ থাকলে, আমি এই জাতীয় পরামর্শগুলিতে আপত্তি করব না।

উত্তর:


38

আপনি পাইথনের csvমডিউলটি ব্যবহার করতে পারেন ।

একটি সাধারণ উদাহরণ:

import csv
reader = csv.reader(open("test.csv", "r"))
for row in reader:
    for col in row:
        print col

আমার চূড়ান্ত সমাধানটি পাইথনে ছিল কারণ আমার পার্লটি খুব মরিচা। ধন্যবাদ।
স্টিভেন ডি

2
আরও ভাল, পান্ডাস ব্যবহার করুন । এটি স্পষ্টভাবে টেবুলার ডেটা দিয়ে কাজ করার জন্য ডিজাইন করা হয়েছে।
জোশ

38

আমি সম্ভবত কিছুটা দেরি করে চলেছি , তবে আরও একটি সরঞ্জাম উল্লেখযোগ্য: সিএসভিকিট

http://csvkit.readthedocs.org/

এটিতে প্রচুর কমান্ড লাইনের সরঞ্জাম রয়েছে:

  • পুনরায় ফর্ম্যাট করা CSV ফাইলগুলি,
  • বিভিন্ন ফর্ম্যাট (সিএসভি, এসকিউএল, এক্সএলএস) থেকে সিএসভিতে এবং এ রূপান্তর করুন,
  • সমতুল্য cut, grep, sortএবং অন্যদের, কিন্তু যে CSV-সচেতন,
  • বিভিন্ন CSV ফাইলে যোগদান করুন,
  • সিএসভি ফাইল থেকে ডেটাতে সাধারণ এসকিউএল কোয়েরি করুন।

6
একটি দুর্দান্ত সরঞ্জাম যা প্রশ্নের মানদণ্ডটি আশ্চর্যরূপে পূরণ করে (বিশেষত এটি কোনও প্রোগ্রামিং ভাষায় ঝাঁপিয়ে পড়ার প্রয়োজন হয় না এবং অন্যান্য ইউনিক্স ইউটিলিটিগুলির সাথে মানানসইভাবে তৈরি করা হয়)।
mm2001

15

পার্লের সাথে একটি কাজের মতো শোনায় Text::CSV

perl -MText::CSV -pe '
    BEGIN {$csv = Text::CSV->new();}
    $csv->parse($_) or die;
    @fields = $csv->fields();
    print @fields[1,3];
'

কলামের নামগুলি কীভাবে পরিচালনা করতে হয় তার জন্য ডকুমেন্টেশন দেখুন। বিভাজক এবং উদ্ধৃতি শৈলীতে পরামিতিগুলির সাথে সুর করা যেতে পারে newText::CSV::Separatorবিভাজক অনুমান করার জন্যও দেখুন ।


এমন একটি লাইনার রয়েছে যা আপনি এটিতে কমপ্যাক্ট করতে পারেন। আমি পার্ল পছন্দ করি, তবে কেবল তখনই যখন আমি স্ক্রিপ্ট না দিয়ে সরাসরি কমান্ড লাইন থেকে
আবেদন করতে পারি

2
@ ইউজার 000০০০, আপনার শেলটি না থাকলে (t)cshকমান্ডটি আপনার শেলের প্রম্পটে ঠিক কাজ করবে। আপনি যদি একটি লাইনে চান তবে আপনি সর্বদা এই লাইনে একসাথে যোগ দিতে পারেন। নিউলাইনটি সাধারণত সি এর মতো পার্ল সিনট্যাক্সের ঠিক জায়গার মতো হয়
স্টাফেন চ্যাজেলাস

আমি অনুমান করি. যদিও 2 টিরও বেশি লাইন 1 তে স্কোয়াশ করা আমার এক লাইনার দ্বারা আসলে বোঝানো হয়নি। আমি আশা করছিলাম এমন কিছু সিনট্যাকটিক চিনি রয়েছে যা এর কিছুটা সুস্পষ্টভাবে করতে পারে (যেমন কীভাবে -eএকটি অন্তর্ভুক্ত লুপ তৈরি করে)।
শ্রীধর সারনোবাত

10

আমি সিএসভিফিক্স পেয়েছি, একটি কমান্ড লাইনের সরঞ্জামটি কাজটি ভালভাবে করে। আপনার এটি নিজেই তৈরি করতে হবে:

http://neilb.bitbucket.org/csvfix

এটি আপনার প্রত্যাশিত সমস্ত জিনিস, কলামগুলি অর্ডার / নির্বাচন, বিভক্ত / সংহতকরণ এবং CSV ডেটা থেকে এসকিউএল সন্নিবেশ উত্পন্ন করতে এবং সিএসভি ডেটা পৃথক করতে পছন্দ করবে না এমন অনেকগুলি করে।


8

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

rows print myfile.csv

যদি myfile.csvএটির মতো হয়:

state,city,inhabitants,area
RJ,Angra dos Reis,169511,825.09
RJ,Aperibé,10213,94.64
RJ,Araruama,112008,638.02
RJ,Areal,11423,110.92
RJ,Armação dos Búzios,27560,70.28

তারপরে সারিগুলি সুন্দর উপায়ে বিষয়গুলি মুদ্রণ করবে:

+-------+-------------------------------+-------------+---------+
| state |              city             | inhabitants |   area  |
+-------+-------------------------------+-------------+---------+
|    RJ |                Angra dos Reis |      169511 |  825.09 |
|    RJ |                       Aperibé |       10213 |   94.64 |
|    RJ |                      Araruama |      112008 |  638.02 |
|    RJ |                         Areal |       11423 |  110.92 |
|    RJ |            Armação dos Búzios |       27560 |   70.28 |
+-------+-------------------------------+-------------+---------+

ইনস্টল করার প্রক্রিয়া

আপনি যদি পাইথন বিকাশকারী এবং ইতিমধ্যে pipআপনার মেশিনে ইনস্টল করে রেখেছেন তবে কেবল কোনও ভার্চুয়ালেনভের সাথে বা এর সাথে চালান sudo:

pip install rows

আপনি যদি ডেবিয়ান ব্যবহার করছেন:

sudo apt-get install rows

অন্যান্য দুর্দান্ত বৈশিষ্ট্য

রূপান্তর রূপান্তর

আপনি যে কোনও সমর্থিত বিন্যাসের মধ্যে রূপান্তর করতে পারেন:

rows convert myfile.xlsx myfile.csv

অনুসন্ধান

হ্যাঁ, আপনি একটি সিএসভি ফাইলে এসকিউএল ব্যবহার করতে পারেন:

$ rows query 'SELECT city, area FROM table1 WHERE inhabitants > 100000' myfile.csv
+----------------+--------+
|      city      |  area  |
+----------------+--------+
| Angra dos Reis | 825.09 |
|       Araruama | 638.02 |
+----------------+--------+

স্টাডআউটের পরিবর্তে ক্যোয়ারীর আউটপুট কোনও ফাইলে রূপান্তর করা --outputপ্যারামিটার ব্যবহার করেও সম্ভব ।

পাইথন গ্রন্থাগার হিসাবে

আপনি আপনার পাইথন প্রোগ্রামগুলিতেও এটি করতে পারেন:

import rows
table = rows.import_from_csv('myfile.csv')
rows.export_to_txt(table, 'myfile.txt')
# `myfile.txt` will have same content as `rows print` output

আপনি এটা উপভোগ করেন!


6

আরআর আমার প্রিয় প্রোগ্রামিং ভাষা নয়, তবে এটি ভালো জিনিসগুলির জন্য ভাল। যদি আপনার সিএসভি ফাইল হয়

***********
foo.csv
***********
 col1, col2, col3
"this, is the first entry", this is the second, 34.5
'some more', "messed up", stuff

আর ইন্টারপ্রেটার টাইপের ভিতরে

> x=read.csv("foo.csv", header=FALSE)

> x
                     col1                col2   col3
1 this, is the first entry  this is the second   34.5
2              'some more'           messed up  stuff
> x[1]  # first col
                      col1
1 this, is the first entry
2              'some more'
> x[1,] # first row
                      col1                col2  col3
1 this, is the first entry  this is the second  34.5

আপনার অন্যান্য অনুরোধ সম্পর্কিত, "প্রথম সারিতে প্রদত্ত কলামের নামগুলির উপর ভিত্তি করে কলামগুলি নির্বাচন করার ক্ষমতা" জন্য দেখুন

> x["col1"]
                      col1
1 this, is the first entry
2              'some more'

"অন্যান্য উদ্ধৃতি শৈলীর সমর্থন" এর quoteজন্য read.csv (এবং সম্পর্কিত ফাংশন) এর আর্গুমেন্টটি দেখুন । "ট্যাব-বিচ্ছিন্ন ফাইলগুলির জন্য সমর্থন" এর sepজন্য read.csv ( sep'\ t' এ সেট করুন ) এ যুক্তি দেখুন ।

আরো তথ্যের জন্য, অনলাইন সাহায্য দেখুন.

> help(read.csv)

আমি আর এর সাথে খুব পরিচিত, তবে আমার লক্ষ্যটি ছিল আমি বাশের কাছ থেকে সহজেই ব্যবহার করতে পারি এমন কিছু পাওয়া।
স্টিভেন ডি

1
@ স্টিভেন: আর পাইথন বা পার্লের মতো একইভাবে কমান্ড লাইন থেকে সহজেই চালানো যেতে পারে, যদি এটি আপনার উদ্বেগ হয় is দেখুন Rscript(বেস আর বিতরণের অংশ) বা addon প্যাকেজ littler। আপনি করতে পারেন #!/usr/bin/env Rscriptবা অনুরূপ।
ফাহিম মিঠা

অই হ্যাঁ. আমি আর তে বেশ দক্ষ, কিন্তু এই ধরণের ইউটিলিটি তৈরি করতে এটি বেশি ব্যবহার করিনি। পাইথনে আমার কিছু কাজ করার আছে তবে আমি আর তেও কিছু তৈরি করার চেষ্টা করতে পারি।
স্টিভেন ডি


4

মিলার হ'ল সিএসভি (শিরোলেখ সহ) সহ নাম-ভিত্তিক ডেটা ম্যানিপুলেট করার জন্য আরেকটি দুর্দান্ত সরঞ্জাম। কোনও সিএসভি ফাইলের প্রথম কলামটি বের করার জন্য, এর নামটি যত্ন না করেই আপনি এর মতো কিছু করতে পারেন

printf '"first,column",second,third\n1,2,3\n' |
  mlr --csv --implicit-csv-header --headerless-csv-output cut -f 1

মিলার খুব চিত্তাকর্ষক। আমি এর সাথে তুলনা করব awk, তবে অত্যন্ত ডিএসভি-সচেতন।
ডেরেক মাহর

3

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


9
আমি কিছুক্ষণ আগে ব্যবহার করেছি এমন একটি অদ্ভুত সিএসভি পার্সার ... এটি বেশ ভাল ভাবেই
পিটার.ও



2

এই প্যাকেজটি "csvtool" ব্যবহার করে দেখুন CSV ফাইলগুলি পরিচালনা করার জন্য এটি হ্যান্ডি কমান্ড লাইন সরঞ্জাম


1
ইতিমধ্যে উল্লিখিত হয়েছে, আরও বিশদ সহ ...
জেসনওয়ারিয়ান

2

সিসি কমান্ড-লাইন সিএসভি প্রসেসিংও করবে। এটি সি (ছোট / লাইটওয়েট) এ rpm এবং ডাব প্যাকেজ সহ বেশিরভাগ ডিস্ট্রোসের জন্য উপলব্ধ।

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

echo '"this, is the first entry", this is the second, 34.5' | cissy -c 1
"this, is the first entry"

অথবা

echo '"this, is the first entry", this is the second, 34.5' | cissy -c 2
 this is the second

অথবা

echo '"this, is the first entry", this is the second, 34.5' | cissy -c 2-
 this is the second, 34.5

1

সিএসভি ফর্ম্যাটে ফাইলগুলি পড়ার / লেখার জন্য একটি কারি পাঠাগার রয়েছে: সিএসভি


2
পার্ল, পাইথন এবং আর উত্তরগুলির মতো কিছু নমুনা কোড পোস্ট করতে আপনি কি আপত্তি করবেন? (বিশেষত কারি কোন সাধারণ ইউনিক্স স্ক্রিপ্টিং ভাষা নয়)
গিলস 'অশুভ হওয়া বন্ধ করুন'

@ গিলস: হ্যাঁ, আপনি ঠিক বলেছেন, উত্তরটি আরও ভাল করার জন্য আমার কিছু নমুনা কোড পোস্ট করা উচিত। আমি কিছুক্ষণের মধ্যে এটি করতে যাচ্ছি।
imz -

1

গিথুব রেপো স্ট্রাকচার্ড টেক্সট সরঞ্জামগুলির সাথে সম্পর্কিত লিনাক্স কমান্ড লাইন সরঞ্জামগুলির একটি দরকারী তালিকা রয়েছে। বিশেষত, ডিলিমিটার পৃথকীকরণকৃত মান বিভাগে বেশ কয়েকটি সিএসভি সক্ষম সরঞ্জাম তালিকাভুক্ত করা হয়েছে যা অনুরোধ করা ক্রিয়াকলাপগুলিকে সরাসরি সমর্থন করে।


1

আমি সুপারিশ চাই xsv - একটি দ্রুত করা CSV কমান্ড লাইন টুলকিট মরচে লেখা ( গিটহাব )।

লিখেছেন Ripgrep এর লেখক।

কীভাবে আমরা আমাদের সিএসভি প্রসেসিং 142x দ্রুত ( রেডডিট থ্রেড ) তৈরি করেছি এতে বৈশিষ্ট্যযুক্ত ।


1

সেরা সরঞ্জামগুলির মধ্যে একটি হ'ল মিলার ( http://johnkerl.org/miller/doc/index.html )। এটি সিএসভি, টিএসভি, এবং টেবুলার জেএসএন এর মতো নাম সূচকযুক্ত ডেটা বাছাই করার মতো, আড্ডা, সিড, কাটা, যোগদান এবং সাজানোর মতো।

উদাহরণে

echo '"this, is the first entry", this is the second, 34.5' | \
mlr --icsv --implicit-csv-header cat

আপনি দেয়

1=this, is the first entry,2= this is the second,3= 34.5

আপনি যদি একটি টিএসভি চান

echo '"this, is the first entry", this is the second, 34.5' | \
mlr --c2t --implicit-csv-header cat

আপনাকে দেয় (শিরোনাম অপসারণ করা সম্ভব)

1       2       3
this, is the first entry         this is the second      34.5

আপনি যদি প্রথম এবং তৃতীয় কলামটি চান তবে তাদের ক্রম পরিবর্তন করুন

echo '"this, is the first entry", this is the second, 34.5' | \
mlr --csv --implicit-csv-header --headerless-csv-output cut -o -f 3,1

আপনি দেয়

 34.5,"this, is the first entry"

1

আপনি যদি টার্মিনালে একটি ভিজ্যুয়াল / ইন্টারেক্টিভ সরঞ্জাম চান তবে আমি আন্তরিকভাবে ভিসিডাটার প্রস্তাব দিই।

এখানে চিত্র বর্ণনা লিখুন

এটিতে ফ্রিকোয়েন্সি টেবিল (উপরে দেখানো), পাইভট, গলনা, স্ক্যাটারপ্লটস, পাইথন ব্যবহার করে ফিল্টারিং / গণনা এবং আরও অনেক কিছু রয়েছে।

আপনি যেমন CSV ফাইল পাস করতে পারেন

vd hello.csv

সেখানে CSV নির্দিষ্ট বিকল্পগুলি হল: --csv-dialect, --csv-delimiter, --csv-quotechar, এবং --csv-skipinitialspaceজন্য ফাইন টিউন CSV ফাইল হ্যান্ডলিং।


0

একটি উদ্ভট সমাধান

awk -vq='"' '
func csv2del(n) {
  for(i=n; i<=c; i++)
    {if(i%2 == 1) gsub(/,/, OFS, a[i])
    else a[i] = (q a[i] q)
    out = (out) ? out a[i] : a[i]}
  return out}
{c=split($0, a, q); out=X;
  if(a[1]) $0=csv2del(1)
  else $0=csv2del(2)}1' OFS='|' file
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.