পাইথনে আমি কীভাবে একটি এক্সেল ফাইল খুলব?


87

পাইথনে পড়ার জন্য একটি ফাইল যা আমি এক্সেল ফাইল খুলব?

আমি পাঠ্য sometextfile.txtকমান্ডের সাহায্যে পাঠ্য ফাইলগুলি খুললাম । এক্সেল ফাইলের জন্য আমি কীভাবে এটি করব?


4
এক্সেলের কোন সংস্করণ? যদি আপনি নিজেকে 2007 বা 2010 এর মাধ্যমে তৈরি এক্সেল ফাইলগুলি খোলার মধ্যে সীমাবদ্ধ করতে পারেন তবে আপনার XML হিসাবে অনেকগুলি বা সমস্ত ফাইল পার্স করতে সক্ষম হবেন।
অ্যাডাম ক্রসল্যান্ড

উত্তর:


97

সম্পাদনা করুন:
পান্ডাসের নতুন সংস্করণে, আপনি পরামিতি হিসাবে শীটের নামটি পাস করতে পারেন।

file_name =  # path to file + file name
sheet =  # sheet name or sheet number or list of sheet numbers and names

import pandas as pd
df = pd.read_excel(io=file_name, sheet_name=sheet)
print(df.head(5))  # print first 5 rows of the dataframe

কীভাবে পাস করতে হবে তার উদাহরণগুলির জন্য দস্তাবেজগুলি পরীক্ষা করুন sheet_name:
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html

পুরানো সংস্করণ:
আপনি প্যাকেজ ব্যবহার করতে পারেনpandas ....

আপনি যখন একাধিক পত্রক সহ একটি এক্সেল ফাইলের সাথে কাজ করছেন, আপনি ব্যবহার করতে পারেন:

import pandas as pd
xl = pd.ExcelFile(path + filename)
xl.sheet_names

>>> [u'Sheet1', u'Sheet2', u'Sheet3']

df = xl.parse("Sheet1")
df.head()

df.head() আপনার এক্সেল ফাইলের প্রথম 5 টি সারি মুদ্রণ করবে

যদি আপনি একটি একক শীট দিয়ে কোনও এক্সেল ফাইলের সাথে কাজ করছেন তবে আপনি কেবল ব্যবহার করতে পারেন:

import pandas as pd
df = pd.read_excel(path + filename)
print df.head()

4
এই সমাধান আমার upvote পায়। ওপেনপ্লেএক্সএল সহ, আমি নিম্নলিখিত সমস্যাটিতে চলেছি "অবৈধ ফাইলএক্সেপশন: ওপেনপিএক্সএল পুরানো .xls ফাইল ফর্ম্যাটটিকে সমর্থন করে না, দয়া করে এই ফাইলটি পড়ার জন্য xlrd ব্যবহার করুন, বা এটি আরও সাম্প্রতিক .xlsx ফাইল ফর্ম্যাটে রূপান্তর করুন"। অন্যদিকে পান্ডাস .xls এবং .xlsx ফাইল উভয়ই হ্যান্ডেল করে ... এছাড়াও, একটি সম্পূর্ণ সারণীটি পড়তে কোডের কেবল একটি লাইন লাগে।
নাথানিয়েলং

4
xlrdএক্সেল ফাইলগুলি পড়ার xlwtজন্য এবং এক্সেল ফাইলগুলি লেখার জন্য আপনাকে alচ্ছিক নির্ভরতা ইনস্টল করতে হবে ।
ফ্লিম

32

Xlrd পাঠাগারটি চেষ্টা করে দেখুন ।

[সম্পাদনা] - আমি আপনার মন্তব্য থেকে যা দেখতে পাচ্ছি তার থেকে নীচের স্নিপেটের মতো কৌশলটি সম্ভবত কৌশলটি করতে পারে। আমি এখানে ধরে নিচ্ছি যে আপনি 'জন' শব্দের জন্য কেবল একটি কলাম অনুসন্ধান করছেন, তবে আপনি আরও যুক্ত করতে পারেন বা এটিকে আরও জেনেরিক ফাংশন হিসাবে তৈরি করতে পারেন।

from xlrd import open_workbook

book = open_workbook('simple.xls',on_demand=True)
for name in book.sheet_names():
    if name.endswith('2'):
        sheet = book.sheet_by_name(name)

        # Attempt to find a matching row (search the first column for 'john')
        rowIndex = -1
        for cell in sheet.col(0): # 
            if 'john' in cell.value:
                break

        # If we found the row, print it
        if row != -1:
            cells = sheet.row(row)
            for cell in cells:
                print cell.value

        book.unload_sheet(name) 

আমি মনে করি এটি আমি যা করতে চাই তা হতে পারে: xlrd আমদানি থেকে ওপেন-ওয়ার্কবুক বই = ওপেন_ওয়ার্কবুক ('সরল.এক্সলস', অন_ডেম্যান্ড = ট্রু) বইয়ের নাম অনুসারে (): if name.endswith ('2'): শীট = book.sheet_by_name (নাম) মুদ্রণ শিট.সেল_ভ্যালু (0,0) book.unload_sheet (নাম) large_files.py তবে আমি চাই না যে এটি শেষের সাথে ব্যবহার করা হোক আমি একটি বর্ণনামূলক নাম সম্বলিত লাইনগুলি খুঁজে পেতে এবং মুদ্রণ করতে চাই ... যেমন আমি চাই যে এটি বিশাল আকারের এক্সেল শীটের লাইনটি মুদ্রণ করতে পারে যাতে এতে জন এর ডেটা থাকে এবং বব এর নয়। সাহায্য?
নওভাক

আমি আপনাকে এটিকে একটি পৃথক প্রশ্ন হিসাবে পোস্ট করার পরামর্শ দিচ্ছি এবং কোডটি একটি ব্লক ব্লকে রেখেছি।
জন কেজ

এটি ধারাবাহিকভাবে সম্পর্কিত প্রশ্নগুলির দ্বিতীয় প্রশ্ন; তৃতীয় প্রশ্নে এটি প্রকাশিত হয়েছে যে আসল এক্সেল ফাইলটি অভিযোগ করা হয়েছে 1.5 গিগাবাইট এবং কম্পিউটারের মেমোরিটিকে "যথেষ্ট নয়" হিসাবে বর্ণনা করা হয়েছে ... স্ট্যাকওভারফ্লো
জন ম্যাকিন

16

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

http://www.python-excel.org/

যদি সম্ভব হয় তবে আপনি এক্সেল স্প্রেডশিটটি সিএসভি ফাইল হিসাবে রফতানি করতে এবং তারপরে বিল্ট-ইন পাইথন সিএসভি মডিউলটি ব্যবহার করে এটি বিবেচনা করতে পারেন:

http://docs.python.org/library/csv.html


ঠিক আছে, আমি আসলে সিএসভি স্টাফ বুঝতে পারি না যে কীভাবে পাইথন আমার এক্সেল ফাইলটি সিএসভি মডিউল হিসাবে খুলবে? আমার কাছে একটি প্রোগ্রাম রয়েছে যা আমি টেক্সট ফাইলগুলির জন্য যা করতে চাই তা করি এবং আমি এই এক্সেল ফাইলটির জন্য একই জিনিসটি করতে চাই ... যা সবচেয়ে ভাল উপায়? আপনি এই দয়া করে বিস্তারিত বলতে পারেন?
নওভাক

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

ফাইলটির সমস্যাটি হ'ল সত্যই বড়। আমি যদি ফাইলটি পুরোপুরি খুলতে না পারি তবে কীভাবে ফাইলটি CSV ফর্ম্যাট হিসাবে সংরক্ষণ করতে পারি?
নওভাক

@ নোভাক: আপনার সমস্যাটি হ'ল আপনার ফাইলটি 1.5 গিগাবাইট এবং আপনার কম্পিউটারের স্মৃতি "যথেষ্ট নয়" ...
জন ম্যাচিন

6

আছে openpxyl প্যাকেজ:

>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.get_sheet_names()
['Sheet2', 'New Title', 'Sheet1']

>>> worksheet1 = wb2['Sheet1'] # one way to load a worksheet
>>> worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet
>>> print(worksheet1['D18'].value)
3
>>> for row in worksheet1.iter_rows():
>>>     print row[0].value()


1

এটি সাহায্য করতে পারে:

এটি এমন একটি নোড তৈরি করে যা 2D তালিকা (তালিকার আইটেমের তালিকা) নেয় এবং তাদের এক্সেল স্প্রেডশীটে ধাক্কা দেয়। IN [] গুলি উপস্থিত আছেন বা নিক্ষেপ করবেন এবং ব্যতিক্রম করবেন তা নিশ্চিত করুন।

এটি এক্সেল 2013 এর জন্য রেভিট এক্সেল ডায়নামো নোডের একটি পুনরায় লেখার জন্য ডিফল্ট প্রিপেইকেজড নোডটি ভাঙ্গা রাখে। আমারও অনুরূপ পঠিত নোড রয়েছে। পাইথনের এক্সেল সিনট্যাক্সটি স্পর্শকাতর।

থানেক্স @ কোডিংনিজা - আপডেট হয়েছে:)

###Export Excel - intended to replace malfunctioning excel node

import clr

clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
##AddReferenceGUID("{00020813-0000-0000-C000-000000000046}") ''Excel                            C:\Program Files\Microsoft Office\Office15\EXCEL.EXE 
##Need to Verify interop for version 2015 is 15 and node attachemnt for it.
from Microsoft.Office.Interop import  * ##Excel
################################Initialize FP and Sheet ID
##Same functionality as the excel node
strFileName = IN[0]             ##Filename
sheetName = IN[1]               ##Sheet
RowOffset= IN[2]                ##RowOffset
ColOffset= IN[3]                ##COL OFfset
Data=IN[4]                      ##Data
Overwrite=IN[5]                 ##Check for auto-overwtite
XLVisible = False   #IN[6]      ##XL Visible for operation or not?

RowOffset=0
if IN[2]>0:
    RowOffset=IN[2]             ##RowOffset

ColOffset=0
if IN[3]>0:
    ColOffset=IN[3]             ##COL OFfset

if IN[6]<>False:
    XLVisible = True #IN[6]     ##XL Visible for operation or not?

################################Initialize FP and Sheet ID
xlCellTypeLastCell = 11                 #####define special sells value constant
################################
xls = Excel.ApplicationClass()          ####Connect with application
xls.Visible = XLVisible                 ##VISIBLE YES/NO
xls.DisplayAlerts = False               ### ALerts

import os.path

if os.path.isfile(strFileName):
    wb = xls.Workbooks.Open(strFileName, False)     ####Open the file 
else:
    wb = xls.Workbooks.add#         ####Open the file 
    wb.SaveAs(strFileName)
wb.application.visible = XLVisible      ####Show Excel
try:
    ws = wb.Worksheets(sheetName)       ####Get the sheet in the WB base

except:
    ws = wb.sheets.add()                ####If it doesn't exist- add it. use () for object method
    ws.Name = sheetName



#################################
#lastRow for iterating rows
lastRow=ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row
#lastCol for iterating columns
lastCol=ws.UsedRange.SpecialCells(xlCellTypeLastCell).Column
#######################################################################
out=[]                                  ###MESSAGE GATHERING

c=0
r=0
val=""
if Overwrite == False :                 ####Look ahead for non-empty cells to throw error
    for r, row in enumerate(Data):   ####BASE 0## EACH ROW OF DATA ENUMERATED in the 2D array #range( RowOffset, lastRow + RowOffset):
        for c, col in enumerate (row): ####BASE 0## Each colmn in each row is a cell with data ### in range(ColOffset, lastCol + ColOffset):
            if col.Value2 >"" :
                OUT= "ERROR- Cannot overwrite"
                raise ValueError("ERROR- Cannot overwrite")
##out.append(Data[0]) ##append mesage for error
############################################################################

for r, row in enumerate(Data):   ####BASE 0## EACH ROW OF DATA ENUMERATED in the 2D array #range( RowOffset, lastRow + RowOffset):
    for c, col in enumerate (row): ####BASE 0## Each colmn in each row is a cell with data ### in range(ColOffset, lastCol + ColOffset):
        ws.Cells[r+1+RowOffset,c+1+ColOffset].Value2 = col.__str__()

##run macro disbled for debugging excel macro
##xls.Application.Run("Align_data_and_Highlight_Issues")

@ কোডিংনিজা যথেষ্ট? :)
অ্যাপসিস 0215

হ্যাঁ আরও ভাল

0

এই কোডটি পাইথনের সাথে আমার জন্য কাজ করে 3.5.৩.২। এটি খোলে এবং সেভ করে এবং এক্সেল করে। আমি বর্তমানে ফাইলে কীভাবে ডেটা সংরক্ষণ করব তা নিয়ে কাজ করছি তবে এটি কোড:

import csv
excel = csv.writer(open("file1.csv", "wb"))

 


-1
import pandas as pd 
import os 
files = os.listdir('path/to/files/directory/')
desiredFile = files[i]
filePath = 'path/to/files/directory/%s'
Ofile = filePath % desiredFile
xls_import = pd.read_csv(Ofile)

এখন আপনি পান্ডাসের ডেটাফ্রেমগুলির শক্তি ব্যবহার করতে পারেন!


4
প্রশ্নটি কোনও এক্সেল ফাইলটি পড়ার বিষয়ে, কমা-বিচ্ছিন্ন পাঠ্য ফাইল নয়। পান্ডসের মনে হয় যে এটির জন্য কোনও ফাংশন রয়েছে ( pandas.read_excel)।
বার্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.