Windows と Linux の両方で Python を動かす

ブラウン運動の研究を進める中、Pythonで様々な用途のコードを作ってはトライを繰り返していますが、そんな折に、PythonコードをWindowsとLinuxの両方で動作させる場合も度々あります。(いつも使用しているtrackpyはWindowsよりLinuxの方が早く実行できたりして・・・)

基本的には、PythonはOSを選びません。Windowsだろうが、Linuxだろうが、Macだろうが、同じコードで実行できます。実際に、今年のコロナ禍の中、学生に在宅でPythonの学習(実験装置の制御や実験データの解析コードの作成)課題を与えたところ、一部の学生はMacでコードを作成していましたが、Zoomでのプログラミング指導も問題なく行えていました。
しかしながら、一部のコードでは、Windowsのコードが、LinuxやMacで動かないことがあります。(LinuxとMacの間は、ここまで問題とならない。)今回は、LinuxとWindowsの違いと修正点をまとめた備忘録です。

¥と\と使い分け

¥(円マーク)と\(バックスラッシュ)はWindowsでは一緒だよと学生にも教えていたのですが、PCスキルの低い私はコロナ禍の最近まで、使い分ける必要を知りませんでした。これまで、Windowsでは「¥」であり、Linuxでは「\」が同じキーコード(文字の背番号)が与えられていたのですが、一般的になってきたUTF-8では使い分けていました。今でもフォントによっては、¥と入力しても\と入力しても、どちらも同じ文字が表示されることも多いですが、使い分けないとエラーがでる場合があります(文字列の置換に失敗していた)。Linuxにおいては、基本的には、\を使っておけば大丈夫かと思います。ただ、私の個人的な失敗談ですが、\をどう入力して良いか分からず、数日間、一度表示できた\をコピペで使っていることがありました。\を使う状態の場合は、ほとんど、¥をキーボードで打ち込むと画面には\が表示されたのですが、人間慣れとは良くないことで、パソコンのキーボードをよく観察していないことが判明しました。

パソコンのキー配列

これまでの黄色く囲んだ¥マークを叩くと、場合によっては、\が表示されていたのですが、¥と\を使い分ける場合は、¥を叩いても¥としか表示されず困っていました。堪りかねてググるとすぐに判明し、日本語キーボードに\記号があることを知ったのです。それよりコピペの煩わしさから解放され、しっかり「\キー」を打つようになりました。

ディレクトリーのセパレーター

ディレクトリーのセパレーターとは、インターネットのURLでは/に対応する文字のことです。URLの区切り記号や、WindowsやLinuxでのディレクトリーやフォルダーを区切る文字です。Linuxの場合は、インターネットのURLと同じく/(スラッシュ)が使われるのですが、Windowsの場合は、\(バックスラッシュ)が使われます。さらに日本語のWindowsの場合は、\と¥のキーコードが同じため¥になっていることがほとんどです。Pythonでコードを実行する際にファイル名を指定するときなどに、WindowsやLinuxの違いが現れて来ることがあります。自動的に/と\(¥)を区別して問題なくファイルにアクセスすることができる場合も多くありますが、「ファイルが見つからない」などのエラーの場合はセパレーターをチェックするのが良いかもしれません。しかし、ただ、/と\(¥)の違いだけなら良いのですが、Pythonにおいては、\(¥)が別の意味をもつ記号なので厄介だったりします。ファイル名を文字列で指定してコードを実行することも多いかと思いますが、Pythonにおいて\(¥)は、エスケープシーケンスとして使われるからです。例えば、ファイル「memos/0123.csv」にアクセスしたい場合に
filename = ‘memos/0123.csv’
などと文字列に一度代入してから使用することも多いでしょう。また、文字列を指定する際に囲む”や’を文字列内に書き込みたい場合は、どうすれば良いでしょか?  答えは、「\”」や「\’」と入力します。このように特別な記号を文字列に代入するために使用されるサインがエスケープシーケンスであり、Pythonの場合は、\バックスラッシュもしくは¥円マークが使用されます。では、\を文字列に代入したい場合は、どうすれば良いかというと「\\」のように\(¥)を2回重ねます。Linuxにおいて上記のように指定されているファイル名をWindowsに対応させるためには
filename = ‘memos\\0123.csv’
とコードを作成することになります。

csvファイルで空白行ができてしまう場合

これも、たまに出くわすことがあるWindowsとLinuxの間での齟齬ですが、Windowsでコードを実行すると作成されたcsvファイルに余分な空白行が入ることがあります。実験データなどは、csv形式で保存して、エクセルなどでグラフ化するのが常なのですが、Linuxで問題なく動いていたコードをWindowsに持ってくるとcsvファイルに空白行が入り、その空白行があるために動かないケースもあります。コードが途中にcsvファイルを吐き出す場合に、WindowsとLinuxで生成されるファイルが同一か確認する必要があります。Windowsの場合に空白行が入る場合は、
with open(“ファイル名.csv”, “w”) as f:
となどと記述されているコードを
with open(“ファイル名.csv”, “w”, newline=””) as f:
と修正すると解決します。(詳細は、こちらから