実現したいこと
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行目以下が空の場合」で検索してみましたが、よく分かりませんでした。
> 「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以外のスプレッドシートは確認していませんが、おそらく同じですかね。
スプレッドシートじゃなくて、一般のプログラミング言語やテキスト処理ツールだと、空行は空行として存在するとして扱われる(※)ので、そのあたりは厳密に書く必要があります。
(※:テキストエディターで、保存時にファイル末尾の空行を削除する機能があったりしますし、他にも例外ケースあり)
>otn様
コメントありがとうございます。
data1.csv、data2.csvのようなファイルは実験データ(値は適当です)で、計測機器から自動で生成、出力されるものです。そのため、ヘッダ部分(Run p T)は必ず存在するので、「ファイルの2行目以下が空の場合」のような書き方になってしまいました。
勉強になりました。
スプレッドシートに読み込んだ画面を見ての描写ではないということでしょうか?
そうだとすると、ストレートに「ファイルの中身はヘッダのみ」「ファイルの中身が1行」とかでなく、何故そんなあいまいな表現になったのか不思議です。
>otn様
ファイルをExcelで開いてみた結果を見て、「ファイルの2行目以下が空の場合」と表現しました。
結果的には、検索ワードが良くなかったということで、勉強になりました。
やはりそうですか。であれば、
> 結果的には、検索ワードが良くなかったということで、
検索の仕方というより、「ファイルの2行目以下が空の場合」と思ったこと自体が良くないので、そう見えた原因である「CSVファイルの中身を確認するのにExcelを使った」ことが良くなかったということかと思います。エディターで開けば良かった。
>otn様
確かにエディターで開けば良かったですね。
どうもありがとうございました。
回答2件
あなたの回答
tips
プレビュー