質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

20466閲覧

pythonで、ファイルの拡張子を変換してみたい。

HidenoriYamano

総合スコア60

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2015/06/15 08:37

pythonで、ファイルの拡張子を.txt → .xlsx に変換したいです。
.txtがまとめられているディレクトリを/Users/txt
.xlsxに変換した後にファイルをまとめる先のパスを /Users/xlsx
とした場合、どのようにコードを打てばよいでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

コメントだとインデントがうまくいきませんので、
こちらに、再投稿します。

lang

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3import glob 4import os 5import shutil 6from_dir='/Users/txt' 7to_dir='/Users/xlsx' 8#from_dir='txt' 9#to_dir='xlsx' 10 11filenames = glob.glob( from_dir + "/*" ) 12 13for file in filenames: 14 # fname:ファイル名パスなし 15 fname = os.path.basename( file ) 16 17 # bname:ファイル名拡張子なし, ext:拡張子 18 bname, ext = os.path.splitext( fname ) 19 20 # パス + ファイル名拡張子なし + 拡張子 21 fpath=from_dir + '/' + bname + '.' + 'txt' 22 tpath=to_dir + '/' + bname + '.' + 'xlsx' 23 24 utf_file = open( fpath ) 25 sjis_file = open( tpath, 'w' ) 26 27 for line in utf_file: 28 sjis_file.write(unicode(line, 'utf-8').encode('shift-jis')) 29 30 utf_file.close() 31 sjis_file.close() 32 # コピー 33 #shutil.copyfile( fpath, tpath )

投稿2015/06/15 13:47

frogman

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HidenoriYamano

2015/06/15 15:15

何度もありがとうございます。インデントに注意してみました。拡張子をcsvにしましたが、1行目だけ綺麗に入っていましたが、2行目以降は空欄でした。また、for文でディレクトリ内のファイルをすべて書き込んでいるはずが、1つだけしかできていませんでした。泣
guest

0

本格的にやるには、ライブラリをインストールするしかなさそうです。

http://openpyxl.readthedocs.org/en/latest/

で、テキストを読んで、ファイル名をXXX.XLSXに変えて、上記のライブラリを使用して書き出す。
の繰り返しでできそうです。

投稿2015/06/15 12:57

frogman

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

frogman

2015/06/15 12:58

コメントを投稿するつもりが、間違えてしまいました。。。。 すみません。。
guest

0

自分の環境には、Excelは入っていないので、OpenOffice( Open calc)で試してみましたが、
テキストのtxtの拡張子をxlsxに変換しただけでも読めますね。。。
本家のEXCELは、駄目なのですかね。。。

投稿2015/06/15 12:09

frogman

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HidenoriYamano

2015/06/15 12:45

本家だとダメなのかもしれません。中身の変換のやり方、わかりますでしょうか。
frogman

2015/06/15 12:50

拡張子をXLSXでなく、CSVにすれば開けるとおもいます。 ただし、カンマがあればセルが分かれてしまいますが。
HidenoriYamano

2015/06/15 13:05

csvで、開けましたが、中身が文字化けしていました><
frogman

2015/06/15 13:15

Linux? のコードは、unicodeではないですか? SJISに変換する必要があるとおもいます。
HidenoriYamano

2015/06/15 13:27

sjisに変換するというのは、どの段階でしょうか>< pythonのコードでかくことは可能ですか。
frogman

2015/06/15 13:44

#!/usr/bin/env python # -*- coding: utf-8 -*- import glob import os import shutil from_dir='/Users/txt' to_dir='/Users/xlsx' #from_dir='txt' #to_dir='xlsx' filenames = glob.glob( from_dir + "/*" ) for file in filenames: # fname:ファイル名パスなし fname = os.path.basename( file ) # bname:ファイル名拡張子なし, ext:拡張子 bname, ext = os.path.splitext( fname ) # パス + ファイル名拡張子なし + 拡張子 fpath=from_dir + '/' + bname + '.' + 'txt' tpath=to_dir + '/' + bname + '.' + 'xlsx' utf_file = open( fpath ) sjis_file = open( tpath, 'w' ) for line in utf_file: sjis_file.write(unicode(line, 'utf-8').encode('shift-jis')) utf_file.close() sjis_file.close() # コピー #shutil.copyfile( fpath, tpath )
frogman

2015/06/15 13:46

上記でどうでしょう? コピーのかわりに uft-8で読み込んで、shift-jisで書き込んでみました。 以下の部分です。 utf_file = open( fpath ) sjis_file = open( tpath, 'w' ) for line in utf_file: sjis_file.write(unicode(line, 'utf-8').encode('shift-jis')) utf_file.close() sjis_file.close()
HidenoriYamano

2015/06/15 14:34

ファイルは作成できましたが、また同じように表示されて開けません。
frogman

2015/06/15 14:35

Linuxですか?環境がをお知らせください。 Linuxであれば、コマンドラインで、 localeの結果を貼り付けてください。
HidenoriYamano

2015/06/15 14:40

それと、実行した際に Traceback (most recent call last): for line in utf_file: ValueError: I/O operation on closed file とエラーが表示されました。
HidenoriYamano

2015/06/15 14:42

すいません。あまり詳しくないのであってるかわかりませんが、OSはwindowsです。sublimetextというテキストエディタでctrl+bで実行しました><
frogman

2015/06/15 14:49

そうですか。。。自分は、Linuxで生成したものをWidowsで表示してみましたが、 うまく表示されました。 そもそもWindows上でのコピーの段階で、文字化けするほうが変ですね。。。 先ほど、作成した、コピー後のxxxx.csvファイルをメモ帳で表示しても文字化けするでしょうか? 文字化けしたら、コピー前のファイルもメモ帳で見てみてください。 コピー前とコピー後で変化するはずがないので。
HidenoriYamano

2015/06/16 13:32

返信が遅くなってしまってすいません。macで同じコードを実行すると、うまくいきました。しかし、csvファイルを開いた時に、スペースで区切られていなかったため、改善が必要です。何か方法はありますでしょうか。
guest

0

pythonは、そんなに詳しくないのですが、ShellやPerlでいつもやってる方法で、書いてみました。
(もっと上手にやるほうほうが、あるかもですが。。。)

一応、コピーするという前提で書きました。移動の場合は変更してください。

lang

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3import glob 4import os 5import shutil 6from_dir='/Users/txt' 7to_dir='/Users/xlsx' 8 9filenames = glob.glob( from_dir + "/*" ) 10 11for file in filenames: 12 # fname:ファイル名パスなし 13 fname = os.path.basename( file ) 14 15 # bname:ファイル名拡張子なし, ext:拡張子 16 bname, ext = os.path.splitext( fname ) 17 18 # パス + ファイル名拡張子なし + 拡張子 19 fpath=from_dir + '/' + bname + '.' + 'txt' 20 tpath=to_dir + '/' + bname + '.' + 'xlsx' 21 22 # 何をコピーしているか表示 23 print fpath + ' -> ' + tpath 24 25 # コピー 26 shutil.copyfile( fpath, tpath )

投稿2015/06/15 11:42

frogman

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HidenoriYamano

2015/06/15 11:59

回答ありがとうございます。変換できたのですが、「ファイル形式またはファイル拡張子が正しくないため開けません」と表示されてしまいました。どうしたらよいでしょうか。
frogman

2015/06/15 12:03

拡張子を変更しただけなので、中身までは変更してません。 中身まで、EXELファイルにコンバートするのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問