অ্যারেতে পাইথন সিএসভি স্ট্রিং


185

কোনও সিএসভি এনকোডেড স্ট্রিংকে বিশ্লেষণ করে এটিকে অ্যারে বা অভিধানে রূপান্তর করতে কোনও সাধারণ গ্রন্থাগার বা ফাংশন সম্পর্কে কেউ জানেন?

আমি মনে করি না যে আমি সিএসভি মডিউলে অন্তর্নির্মিত চাই কারণ যে সমস্ত উদাহরণ আমি দেখেছি তাতে স্ট্রিং নয়, ফাইলপথ লাগে not

উত্তর:


257

আপনি স্ট্রিংকে ফাইলের একটি সামগ্রীতে রূপান্তর করতে পারেন io.StringIOএবং তারপরে csvমডিউলটিতে এটি প্রেরণ করতে পারেন :

from io import StringIO
import csv

scsv = """text,with,Polish,non-Latin,letters
1,2,3,4,5,6
a,b,c,d,e,f
gęś,zółty,wąż,idzie,wąską,dróżką,
"""

f = StringIO(scsv)
reader = csv.reader(f, delimiter=',')
for row in reader:
    print('\t'.join(row))

নিউলাইনগুলিতে সহজ সংস্করণ split():

reader = csv.reader(scsv.split('\n'), delimiter=',')
for row in reader:
    print('\t'.join(row))

অথবা আপনি কেবল split()পৃথক পৃথক \nহিসাবে লাইনগুলিতে এই স্ট্রিংটি করতে পারেন , এবং তারপরে split()প্রতিটি লাইনকে মানগুলিতে রূপান্তর করতে পারেন তবে আপনাকে অবশ্যই উদ্ধৃতি সম্পর্কে সচেতন হতে হবে, সুতরাং csvমডিউলটি ব্যবহার করা পছন্দসই।

উপর পাইথন 2 আপনার দ্বারা আমদানি করতে হবে StringIOযেমন

from StringIO import StringIO

পরিবর্তে.


6
বিভক্ত পদ্ধতিটি কাজ করবে না যদি তার সিএসভি ফাইলে কমাগুলি রয়েছে এমন স্ট্রিং থাকে
কারসন মায়ার্স

3
অথবা মান হিসাবে উদ্ধৃত স্ট্রিং (কমা সহ বা এর বাইরে)
আদমক

28
পাইথন 3 এখন io.StringIO ব্যবহার করে। (আশা করি পাইথন 3 ব্যবহারকারীদের একটু সময় বাঁচান) সুতরাং আইও এবং আইও স্ট্রিংআইও আমদানি করুন।
JStrahl

3
পরিবর্তে .split('\n'), আপনি ব্যবহার করতে পারেন .splitlines()
ডেনিলসন সা মিয়া

1
না, এটি ওগনকি :-) সহ পোলিশ অক্ষরের সাথে খুব ভাল কাজ করে
নিক্লাস

69

সরল - সিএসভি মডিউল তালিকাগুলির সাথেও কাজ করে:

>>> a=["1,2,3","4,5,6"]  # or a = "1,2,3\n4,5,6".split('\n')
>>> import csv
>>> x = csv.reader(a)
>>> list(x)
[['1', '2', '3'], ['4', '5', '6']]

4
জেনে রাখা ভাল, তবে মনে রাখবেন যে .split('\n')যদি আপনার ক্ষেত্রগুলিতে নিউলাইন থাকে তবে বিজোড় কাজগুলি করে will
ইনাইমথি

1
@ আইনামথী, যদি এটি সিএসভি হয় তবে ভিতরে থাকা নতুন লাইনগুলি এড়ানো উচিত।
জন লা রোয়

ক্ষেত্রের উদ্ধৃতি দেওয়া থাকলে নিউলাইনগুলি এড়াতে হবে না।
জোনাথন স্ট্রে

1
এই কার্যকারিতা ভাল নথিভুক্ত করা হয় না। ধন্যবাদ.
কাপলিনেটর

13

csv.reader() Https://docs.python.org/2/library/csv.html এর অফিসিয়াল ডকটি খুব সহায়ক, যা বলে

ফাইল বস্তু এবং তালিকার অবজেক্ট উভয়ই উপযুক্ত

import csv

text = """1,2,3
a,b,c
d,e,f"""

lines = text.splitlines()
reader = csv.reader(lines, delimiter=',')
for row in reader:
    print('\t'.join(row))

11
>>> a = "1,2"
>>> a
'1,2'
>>> b = a.split(",")
>>> b
['1', '2']

একটি সিএসভি ফাইল পার্স করতে:

f = open(file.csv, "r")
lines = f.read().split("\n") # "\r\n" if needed

for line in lines:
    if line != "": # add other needed checks to skip titles
        cols = line.split(",")
        print cols

'জটিল থেকে সহজ সরল!'
আবদেলৌহাব

9
-1 এই সমাধানটির বিষয়টি হ'ল এটি "স্ট্রিং পলায়ন" 3, "4,5,6, 6হিসাবে বিবেচনা করে না, অর্থাত্ পাঁচটির পরিবর্তে তিনটি ক্ষেত্র হিসাবে বিবেচিত হবে।
জেড'রট

সহজ তবে কেবল কিছু নির্দিষ্ট ক্ষেত্রে কাজ করে, এটি জেনেরিক সিএসভি পার্সিং কোড নয়
ক্রিস্টোফ রাউসি

8

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

CSV মডিউলের জন্য পাইথন ডকুমেন্টেশন কার্যকরী csv.reader একজন এক্সটেনশন, যা একই ইন্টারফেস ব্যবহার কিন্তু অন্যান্য এনকোডিং এবং আয় স্ট্রিং ইউনিকোড সব ব্যবস্থা করতে সক্ষম। ডকুমেন্টেশন থেকে কেবল কোডটি অনুলিপি করুন এবং আটকান। এর পরে, আপনি এর মতো একটি সিএসভি ফাইল প্রক্রিয়া করতে পারেন:

with open("some.csv", "rb") as csvFile: 
    for row in UnicodeReader(csvFile, encoding="iso-8859-15"):
        print row

নিশ্চিত করুন যে ইউনিকোড ফাইলে কোনও বিওএম নেই (বাইট অর্ডার মার্কার)
পিয়ের

1
বিওএম সম্পর্কিত: পাইথনের ইউটিএফ -32, ইউটিএফ -16 ইত্যাদিতে অফিসিয়াল বিওএমগুলি সনাক্ত করা এবং এড়িয়ে যাওয়া উচিত ইউটিএফ -8-এর জন্য অনানুষ্ঠানিক মাইক্রোসফ্ট বিওএম এড়াতে, 'utf-8-sig'পরিবর্তে কোডেক হিসাবে ব্যবহার করুন 'utf-8'
রোসাকোরি

7

ডকুমেন্টেশন প্রতি :

এবং মডিউল সরাসরি পার্সিং স্ট্রিং সমর্থন করে না, এটি সহজেই করা যেতে পারে:

import csv
for row in csv.reader(['one,two,three']):
    print row

কেবল আপনার স্ট্রিংকে একটি একক উপাদান তালিকায় পরিণত করুন।

স্ট্রিংআইও আমদানি করা আমার কাছে কিছুটা অতিরিক্ত মনে হয় যখন এই উদাহরণটি ডক্সে স্পষ্টভাবে হয়।


3

https://docs.python.org/2/library/csv.html?highlight=csv#csv.reader

সিএসভিফাইল এমন কোনও বস্তু হতে পারে যা পুনরায় প্রোটোকল সমর্থন করে এবং তার পরের () পদ্ধতিটি বলা হয়ে প্রতিবার একটি স্ট্রিং প্রদান করে

সুতরাং, একটি StringIO.StringIO(), str.splitlines()বা এমনকি একটি জেনারেটর সব ভাল।


2

এখানে একটি বিকল্প সমাধান:

>>> import pyexcel as pe
>>> text="""1,2,3
... a,b,c
... d,e,f"""
>>> s = pe.load_from_memory('csv', text)
>>> s
Sheet Name: csv
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| a | b | c |
+---+---+---+
| d | e | f |
+---+---+---+
>>> s.to_array()
[[u'1', u'2', u'3'], [u'a', u'b', u'c'], [u'd', u'e', u'f']]

এখানে ডকুমেন্টেশন


2

কোনও সিএসভি কোনও তালিকায় লোড করতে এটি ব্যবহার করুন

import csv

csvfile = open(myfile, 'r')
reader = csv.reader(csvfile, delimiter='\t')
my_list = list(reader)
print my_list
>>>[['1st_line', '0'],
    ['2nd_line', '0']]

0

পান্ডার পাইথনের সিএসভি পড়া বেশ শক্তিশালী এবং স্মার্ট লাইব্রেরি

এখানে একটি সাধারণ উদাহরণ, আমার কাছে রয়েছে চারটি ফাইল সহ জিপ ফাইল।

EXAMPLE.zip
 -- example1.csv
 -- example1.txt
 -- example2.csv
 -- example2.txt

from zipfile import ZipFile
import pandas as pd


filepath = 'EXAMPLE.zip'
file_prefix = filepath[:-4].lower()

zipfile = ZipFile(filepath)
target_file = ''.join([file_prefix, '/', file_prefix, 1 , '.csv'])

df = pd.read_csv(zipfile.open(target_file))

print(df.head()) # print first five row of csv
print(df[COL_NAME]) # fetch the col_name data

আপনার কাছে ডেটা হয়ে গেলে আপনি কোনও তালিকা বা অন্য ফর্ম্যাটগুলির সাথে খেলতে পারবেন।

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