Excelワークブック(xls/xlsx)に新しいワークシートとしてダンプしたいcsvファイルがいくつかあります。どうすればこれを達成できますか?
グーグルで「pyXLwriter」を見つけましたが、プロジェクトが停止したようです。 'pyXLwriter'を試している間、代替/提案/モジュールはありますか?
どうもありがとう。
[編集]
これが私の解決策です:(誰もがはるかにスリムで多くのPythonicソリューションを持っていますか?コメントしてください。thx)
import glob
import csv
import xlwt
import os
wb = xlwt.Workbook()
for filename in glob.glob("c:/xxx/*.csv"):
(f_path, f_name) = os.path.split(filename)
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(str(f_short_name))
spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"')
row_count = 0
for row in spamReader:
for col in range(len(row)):
ws.write(row_count,col,row[col])
row_count +=1
wb.save("c:/xxx/compiled.xls")
print "Done"
yoが「はるかにスリムで、多くのPythonic」とはどういう意味かはわかりませんが、確かに少し工夫することができます。
import glob, csv, xlwt, os
wb = xlwt.Workbook()
for filename in glob.glob("c:/xxx/*.csv"):
(f_path, f_name) = os.path.split(filename)
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(f_short_name)
spamReader = csv.reader(open(filename, 'rb'))
for rowx, row in enumerate(spamReader):
for colx, value in enumerate(row):
ws.write(rowx, colx, value)
wb.save("c:/xxx/compiled.xls")
これで必要なものがすべて見つかります xlwtチュートリアル 。このライブラリ( xlrdおよびxlwt )は、PythonでExcelの相互作用を管理するための最も一般的な選択肢です。欠点は、現時点では、Excelバイナリ形式(.xls)のみをサポートしていることです。
私は常にOffice2003XML形式を文字列で記述します。 xlsxドキュメントを構成するものを記述して圧縮するよりも、実行が非常に簡単で、管理もはるかに簡単です。また、外部ライブラリも必要ありません。 (簡単に自分で転がすことができますが)
また、ExcelはCSVファイルの読み込みをサポートしています。スペース区切りまたは文字区切りの両方。すぐに読み込むか、コピーして貼り付けてから、オプションの[テキストから列へ]ボタンを押すことができます。もちろん、このオプションはPythonとは何の関係もありません。
Xlsxwriterを使用して、PythonでExcelファイルを作成して書き込みます。
インストール方法:pip install xlsxwriter
import xlsxwriter
# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)
# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})
# Write some simple text.
worksheet.write('A1', 'Hello')
# Text with formatting.
worksheet.write('A2', 'World', bold)
# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
# Insert an image.
worksheet.insert_image('B5', 'logo.png')
workbook.close()
GitHubリポジトリ「Kampfmitexcel」でも利用可能...
import csv, xlwt, os
def input_from_user(Prompt):
return raw_input(Prompt).strip()
def make_an_Excel_file_from_all_the_txtfiles_in_the_following_directory(directory):
wb = xlwt.Workbook()
for filename in os.listdir(data_folder_path):
if filename.endswith(".csv") or filename.endswith(".txt"):
ws = wb.add_sheet(os.path.splitext(filename)[0])
with open('{}\\{}'.format(data_folder_path,filename),'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for rowx, row in enumerate(reader):
for colx, value in enumerate(row):
ws.write(rowx, colx, value)
return wb
if __name__ == '__main__':
path_to_data = input_from_user("Where is the data stored?: ")
xls = make_an_Excel_file_from_all_the_txtfiles_in_the_following_directory(path_to_data)
xls_name = input_from_user('What do you want to name the Excel file?: ')
xls.save('{}\\{}{}'.format(data_folder_path,xls_name,'.xls'))
print "Your file has been saved in the data folder."
これはあなたの答え自体の答えに基づいています。しかし、私がxlsxwriterを使用している理由は、xlsx形式でより多くのデータを受け入れるためです。 xlwtでは65556行とxls形式に制限されています。
import xlsxwriter
import glob
import csv
workbook = xlsxwriter.Workbook('compiled.xlsx')
for filename in glob.glob("*.csv"):
ws = workbook.add_worksheet(str(filename.split('.')[0]))
spamReader = csv.reader(open(filename, 'rb'), delimiter=',',quotechar='"')
row_count = 0
print filename
for row in spamReader:
for col in range(len(row)):
ws.write(row_count,col,row[col])
row_count +=1
workbook.close()