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

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

新規登録して質問してみよう
ただいま回答率
85.47%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

Q&A

解決済

2回答

1600閲覧

Pythonで特定の文字がファイル名に入ったCSVファイルを開きたい。

S.K12

総合スコア16

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

0グッド

0クリップ

投稿2020/10/04 17:20

編集2020/10/04 17:22

前提・実現したいこと

Pythonで特定の文字がファイル名に入ったExcelファイルを開きたいです。

図で表すと下記のような感じです。
イメージ説明

環境のせいでファイルが見つからないのかと思い、
AnacondaとVSCodeの2つの環境で試してみたのですが、
どちらでも結果はFileNotFoundErrorでした。

発生している問題・エラーメッセージ

FileNotFoundError Traceback (most recent call last) <ipython-input-10-a0ac85c6b89d> in <module> 7 if re.match(r'[0-32767]',i): #入力文字が範囲内の数値であるか確認 8 j = i.zfill(4) #数値の左にゼロを埋めて4ケタで表示する. ----> 9 file = open('D:\deta\ALL' and j and '\A' and j and 'CH2.csv', 'r') 10 data = csv.reader(file) 11 for row in data: FileNotFoundError: [Errno 2] No such file or directory: 'CH2.csv'

該当のソースコード

Python

1import csv 2import re 3 4print("データ数を入力して下さい.") 5i = input() #数値入力 6 7if re.match(r'[0-32767]',i): #入力文字が範囲内の数値であるか確認 8 j = i.zfill(4) #数値の左にゼロを埋めて4ケタで表示する. 9 file = open('D:\deta\ALL' and j and '\A' and j and 'CH2.csv', 'r') 10 data = csv.reader(file) 11 for row in data: 12 for col in row: 13 print(col, end=',') 14 print() 15 file.close() 16 17else: 18 print('利用可能範囲外の入力です.') #文字もしくは範囲外の数値を入力した際に表示 19 20 21

補足情報(FW/ツールのバージョンなど)

windows 64bit
Anaconda

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

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

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

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

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

1T2R3M4

2020/10/04 19:35

ファイル名のところは and で間違いないですか。 + じゃありませんか。
shiracamus

2020/10/04 19:59

> Pythonで特定の文字がファイル名に入ったExcelファイルを開きたいです。 Excelファイル ではなく CSVファイル ですか?
teamikl

2020/10/04 20:54

エラーとは関係ない部分ですけど、「入力文字が範囲内の数値であるか確認」は意図通りのコードになってません。 正規表現で数値の範囲チェックする場合は、複雑な記述になるので 数値に戻してから範囲チェックしたほうが良いです。
S.K12

2020/10/06 09:33

>ファイル名のところは and で間違いないですか。 >+ じゃありませんか。 andで文字結合になると勘違いしておりました。ご指摘有難う御座います。
S.K12

2020/10/06 09:34

>Excelファイル ではなく CSVファイル ですか? CSVファイルでした。ご指摘有難うございます。
S.K12

2020/10/06 09:36

>エラーとは関係ない部分ですけど、「入力文字が範囲内の数値であるか確認」は意図通りのコードになってません。 >正規表現で数値の範囲チェックする場合は、複雑な記述になるので >数値に戻してから範囲チェックしたほうが良いです。 数値に戻してから範囲チェックしたほうが良いですね、それを踏まえて書き直してみます。 ご指摘有難う御座います。
guest

回答2

0

file = open('D:\deta\ALL' and j and '\A' and j and 'CH2.csv', 'r')のところで、'D:\deta\ALL' and j and '\A' and j and 'CH2.csv'の結果は'CH2. csv'です。カレントディレクトリにこのファイルがないのでエラーが出ています。

file = open(r'D:\deta\ALL' + j + '\A' + j + 'CH2.csv', 'r')でどうでしょうか?

投稿2020/10/05 01:10

編集2020/10/05 01:12
meg_

総合スコア10602

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

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

0

ベストアンサー

まず質問で提示されているエラー自体ですが
存在しないファイルのパスをopenで開こうとするとFileNotFoundErrorになります。
自由入力を受け付けている以上、ファイルの存在チェックをした方がいいです。

後、andでは文字列結合にはならないこと。
数値範囲の正規表現チェックは厄介等はコメントで指摘されている通りだと思います。

python

1import csv 2import os 3 4print("データ数を入力して下さい.") 5i = input() #数値入力 6 7if i.isdigit() and 0 <= int(i) <= 32767: #入力文字が範囲内の数値であるか確認 8 j = i.zfill(4) #数値の左にゼロを埋めて4ケタで表示する. 9 filepath = f'D:\data\ALL{j}\A{j}CH2.csv' 10 11 if os.path.exists(filepath): #入力のファイルが存在するか確認 12 file = open(filepath, 'r') 13 data = csv.reader(file) 14 for row in data: 15 for col in row: 16 print(col, end=',') 17 print() 18 file.close() 19 20 else: 21 print('その入力のファイル名は存在しません.') #入力のファイルが存在しない場合 22 23else: 24 print('利用可能範囲外の入力です.') #文字もしくは範囲外の数値を入力した際に表示

投稿2020/10/05 01:05

yureighost

総合スコア2183

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

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

S.K12

2020/10/06 10:26

ファイルの存在のチェックという事が頭から抜けていたのでとても参考になりました。 数値範囲やandについてもわかっていなかったので助かりました。 数値範囲の正規表現チェックとファイルパスについてあまり理解出来ていないので、勉強のためにそちらも詳しく調べてみます。御回答有難う御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問