L'Isola di Niente
L'Isola di Niente » .NET Tips » .NET と Python メソッド対応表

.NET と Python メソッド対応表

個人的に欲しかったので作ってみた。

パス名取得

よく使うものを抜きだし、Linux の mono でもイケる。
ちなみに 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)

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 共用で実用的なアプリを作るのは絶望的、文化の違いを吸収できない。
ですが遊び程度で共通ソースを作りたいなら以下のようにすれば違う部分を振り分けできる。
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 --- 2017.