質問するログイン新規登録

Q&A

解決済

2回答

585閲覧

ファイルの2行目以下が空のファイルだけ消す方法

yyicp

総合スコア96

Python

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

1グッド

0クリップ

投稿2025/05/30 01:44

編集2025/05/30 02:15

1

0

実現したいこと

data1.csvは以下のようなファイルです。
Run  p T
1501 0.7 500
1503 1.4 700

data2.csvは以下のようなファイルです。
Run  p T
(data2.csvはヘッダーだけのファイルです)

このとき、data2.csvだけを消去するにはどのようにすれば良いでしょうか。

実際にはdata1.csvのようなファイルもdata2.csvのようなファイルもたくさんあるので、
ある条件式を満たすものをglobで集めて消す、というような作業になるのかなと漠然と考えています。

該当のソースコード

python

1import os 2 3os.remove("data2.csv") 4 5########globを使って書く場合 6import os 7import glob 8 9path = './*.csv' 10filelist = glob.glob(path) 11print(filelist)#['.\\data1.csv', '.\\data2.csv'] 12

試したこと

「python ファイルの2行目以下が空の場合」で検索してみましたが、よく分かりませんでした。

melian👍を押しています

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

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

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

otn

2025/05/30 13:58

> 「python ファイルの2行目以下が空の場合」で検索してみましたが、よく分かりませんでした。 「ファイルの2行目以下が空の場合」というのが曖昧だからかも知れません。 melianさんの回答は冒頭に書かれているとおり「中身が1行だけのファイルを削除する」ですが、 1行目に「Run  p T」とかあって、2行目以降は存在するけど空行(改行だけの行)の場合にも、 「ファイルの2行目以下が空の場合」が該当するかもしれません。 何故「ファイルの中身が1行だけ」と書かずに、「ファイルの2行目以下が空の場合」みたいに書いたんだろうと考えると、おそらくこうでしょうか。 Excel等のスプレッドシートプログラムで1行だけのCSVファイルを開くと、2行目以降も存在するように見えて、ただし、2行目以降はセルの中に何も入っていないという状態なので、Excel画面を見たまま描写すると「ファイルの2行目以下が空の場合」になりますね。 これはなるほどです。 Excelで、「2行目以降は存在するけど空行(改行だけの行)」のCSVファイルを開いて、「名前を付けて保存」でcsvファイルかtxtファイルに保存すると1行だけのファイルになりますね。これもなるほど。 Excel以外のスプレッドシートは確認していませんが、おそらく同じですかね。 スプレッドシートじゃなくて、一般のプログラミング言語やテキスト処理ツールだと、空行は空行として存在するとして扱われる(※)ので、そのあたりは厳密に書く必要があります。 (※:テキストエディターで、保存時にファイル末尾の空行を削除する機能があったりしますし、他にも例外ケースあり)
yyicp

2025/05/30 23:34

>otn様 コメントありがとうございます。 data1.csv、data2.csvのようなファイルは実験データ(値は適当です)で、計測機器から自動で生成、出力されるものです。そのため、ヘッダ部分(Run  p T)は必ず存在するので、「ファイルの2行目以下が空の場合」のような書き方になってしまいました。 勉強になりました。
otn

2025/06/02 10:09

スプレッドシートに読み込んだ画面を見ての描写ではないということでしょうか? そうだとすると、ストレートに「ファイルの中身はヘッダのみ」「ファイルの中身が1行」とかでなく、何故そんなあいまいな表現になったのか不思議です。
yyicp

2025/06/03 00:42

>otn様 ファイルをExcelで開いてみた結果を見て、「ファイルの2行目以下が空の場合」と表現しました。 結果的には、検索ワードが良くなかったということで、勉強になりました。
otn

2025/06/03 02:47

やはりそうですか。であれば、 > 結果的には、検索ワードが良くなかったということで、 検索の仕方というより、「ファイルの2行目以下が空の場合」と思ったこと自体が良くないので、そう見えた原因である「CSVファイルの中身を確認するのにExcelを使った」ことが良くなかったということかと思います。エディターで開けば良かった。
yyicp

2025/06/03 03:01

>otn様 確かにエディターで開けば良かったですね。 どうもありがとうございました。
guest

回答2

0

既に解決済みなので御参考ですが,ファイルの内容が提示されているような形式ならデータフレームとして読み込み,行数(df.shape[0])が 0 の場合にファイルを削除するという方法も考えられます。

なお,下記の記述例ではファイル内の区切り文字は空白(sep=' ')としましたがタブ等なら適宜変更ください。

Python

1import os 2import glob 3import pandas as pd 4 5for fn in glob.glob('./*.csv'): 6 df = pd.read_csv(fn, sep=' ') 7 if df.shape[0] == 0: 8 os.remove(fn) 9 print(f'{fn} is removed.') 10# ./data2.csv is removed.

投稿2025/05/30 04:49

little_street

総合スコア543

yyicp

2025/05/30 05:24

できました。 どうもありがとうございました。
guest

0

ベストアンサー

#以下は「2行目が無いファイル(1行だけのファイル)を削除する」という処理になっています。

python

1import os 2import glob 3 4path = './*.csv' 5filelist = glob.glob(path) 6 7for file in filelist: 8 f = open(file) 9 f.readline() 10 if not f.readline(): 11 f.close() 12 os.remove(file) 13 14#for file in filelist: 15# with open(file) as f: 16# f.readline() 17# if not f.readline(): 18# os.remove(file)

投稿2025/05/30 03:08

編集2025/05/30 03:29
melian

総合スコア21611

yyicp

2025/05/30 03:22

ありがとうございます。 私の環境では以下のようなエラーが出てしまいます。 Traceback (most recent call last): File "〇〇〇\testCV474.py", line 16, in <module> os.remove(file) PermissionError: [WinError 32] プロセスはファイルにアクセスできません。別のプロセスが使用中です。: '.\\data2.csv' 再起動しても解消されませんでした。 data1.csvではなく、data2.csvに対してエラーが出ているのが何かヒントになるでしょうか。
melian

2025/05/30 03:30

ファイルをopenしたままで削除しているのでエラーとなっているのかもしれません。(Linux では問題なし) なので、ファイルをcloseしてから削除する様に書き換えてみました。これで試してみて下さい。
yyicp

2025/05/30 03:54

できました。 どうもありがとうございました。
winterboum

2025/05/30 09:58

「Linux では問題なし」 unix系のOSでは rmするfileがopenされている場合は dir情報からは削除するがfileの削除は行わない:closeされるまで再利用・上書きされない 様になってるので大丈夫なのでしょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問