4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ファイル名。pathlibでは半角スペースあってもいいけど、subprocessで叩くときは半角スペースはエスケープすべし、とおもいきや、check_outputを使うとエスケープ不要

Last updated at Posted at 2017-05-31
  • csvを読み込みたい。
  • ファイルによって文字コードはまちまち
  • ファイル名にがある

ときのはなし

import pathlib
import subprocess as sp

path_file = pathlib.Path('hoge hoge.csv')

encoding = sp.getoutput('nkf -g ' + str(path_file))
df = pd.read_csv(path_file, encoding=encoding)

とかくと、subprocessの方でエラー

import pathlib
import subprocess as sp

path_file = pathlib.Path('hoge\ hoge.csv')

encoding = sp.getoutput('nkf -g ' + str(path_file))
df = pd.read_csv(path_file, encoding=encoding)

hogehogeの間を\␣にした)
とかくと、pd.read_csvの方でエラー

怒った!!!!!

怒りのハードコーディングで解決(べつにそんなハードでもないけど)

import pathlib
import subprocess as sp

path_file = pathlib.Path('hoge hoge.csv')

encoding = sp.getoutput('nkf -g ' + str(path_file).replace(' ', '\ ')))
df = pd.read_csv(path_file, encoding=encoding)

ただ、\␣に置換しただけ。

許せない…!
なんでシステムが自動で入れるフォルダ名にがあるのだ。
私…全てのファイル名に紛れている␣を、生まれる前に消し去りたい。全ての宇宙、過去と未来の全てのファイル名に紛れている␣を、この手で。


追記(2017/06/01 17:50)
@shiracamus 氏のコメントを参考に、
encoding = sp.check_output(['nkf', '-g', str(path_file)])
とすれば動きました。

ドキュメントを読んでもgetoutputcheck_outputの違いは分からず…。
勉強が足りませんな。

4
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?