.NET と Python メソッド対応表
個人的に欲しかったので作ってみた。
パス名取得
よく使うものを抜きだし、Linux の mono でもイケる。
ちなみに IronPython ならどちらでもいい。
ちなみに IronPython ならどちらでもいい。
| 目的 | Python | .NET Framework |
|---|---|---|
| 自分のパスを得る | print __file__ | var ass = System.Reflection.Assembly.GetEntryAssembly(); System.Console.WriteLine(ass.Location); |
| パス名連結 | os.path.join(dirname, filename) | System.IO.Path.Combine(dirname, filename); |
| フルパスからディレクトリ名 | os.path.dirname(fullpath) | System.IO.Path.GetDirectoryName(fullpath); |
| フルパスからファイル名 | os.path.basename(fullpath) | System.IO.Path.GetFileName(fullpath); |
| フルパスを分割 | dirname, filename = os.path.split(fullpath) | - |
| 拡張子を得る(ドット付き) | os.path.splitext(filename)[1] | System.IO.Path.GetExtension(filename); |
| 絶対パスを得る | os.path.abspath(filename) | System.IO.Path.GetFullPath(filename); |
| ファイル存在確認 | os.path.isfile(fullpath) | System.IO.File.Exists(fullpath); |
| ディレクトリ存在確認 | os.path.isdir(fullpath) | System.IO.Directory.Exists(fullpath); |
| ユーザー名 | os.environ["USERNAME"] | System.Environment.UserName |
| ユーザーディレクトリ | os.path.expanduser("~") | - |
特殊ディレクトリ
System.Environment.GetFolderPath メソッドを利用する。
引数に System.Environment.SpecialFolder 列挙体を指定。
Environment.SpecialFolder 列挙体 (System)
Linux での Python は glib を利用する、Windows はシラネ。
引数に System.Environment.SpecialFolder 列挙体を指定。
Environment.SpecialFolder 列挙体 (System)
using System;
class Sample
{
public static void Main()
{
// マイドキュメント
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Personal));
// アプリケーションフォルダ
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData));
/* これはできなかった...
foreach (var env in Environment.SpecialFolder)
{
Console.WriteLine(Environment.GetFolderPath(env.ToString()));
}*/
}
}
Linux での Python は glib を利用する、Windows はシラネ。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import glib
XDG_DEFAULT = (
"Desktop",
"Documents",
"Download",
"Music",
"Pictures",
"Public",
"Templates",
"Videos"
)
USER_CONF = (
glib.USER_DIRECTORY_DESKTOP,
glib.USER_DIRECTORY_DOCUMENTS,
glib.USER_DIRECTORY_DOWNLOAD,
glib.USER_DIRECTORY_MUSIC,
glib.USER_DIRECTORY_PICTURES,
glib.USER_DIRECTORY_PUBLIC_SHARE,
glib.USER_DIRECTORY_TEMPLATES,
glib.USER_DIRECTORY_VIDEOS
)
for i in range(len(XDG_DEFAULT)):
print "%s: %s" % (XDG_DEFAULT[i], glib.get_user_special_dir(USER_CONF[i]))
Windows と Linux 振り分け
.NET にて Windows と Linux 共用で実用的なアプリを作るのは絶望的、文化の違いを吸収できない。
ですが遊び程度で共通ソースを作りたいなら以下のようにすれば違う部分を振り分けできる。
Python は書くまでもなくコンソールアプリなら大抵そのまま共用できる。
但し Windows でも 2.7 を使いましょう、Linux は依存関係で後数年は 2.7 のままだと思う。
ですが遊び程度で共通ソースを作りたいなら以下のようにすれば違う部分を振り分けできる。
using System;
class Sample
{
public static void Main()
{
/*
* Environment.OSVersion.ToString();
* Windows 7 => Microsoft Windows NT 6.1.7600.0
* Ubuntu 10.10 => Unix 2.6.35.28
**/
if (Environment.OSVersion.ToString().StartsWith("Microsoft"))
{
Console.WriteLine("Windows です");
}
else if (Environment.OSVersion.ToString().StartsWith("Unix"))
{
Console.WriteLine("Linux です");
}
}
}
GUI の共通化はヤメときましょう...Python は書くまでもなくコンソールアプリなら大抵そのまま共用できる。
但し Windows でも 2.7 を使いましょう、Linux は依存関係で後数年は 2.7 のままだと思う。
Copyright(C) sasakima-nao All rights reserved 2002 --- 2025.