Skip to content

Instantly share code, notes, and snippets.

@isshiki
Last active March 14, 2020 06:49
Show Gist options
  • Save isshiki/f7f876064162532c5bf97f388f193600 to your computer and use it in GitHub Desktop.
Save isshiki/f7f876064162532c5bf97f388f193600 to your computer and use it in GitHub Desktop.
ColabのPyPIパッケージを一覧にするC#コード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Text.RegularExpressions;
using System.IO;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//MakeListText()
MakeMarkdownText();
}
static void MakeListText()
{
var sl = new List<string>();
// !pip freeze で取得したリストを以下の形式に書き換えた
sl.Add("absl-py,0.9.0");
sl.Add("alabaster,0.7.12");
sl.Add("albumentations,0.1.12");
sl.Add("altair,4.0.1");
sl.Add("asgiref,3.2.3");
sl.Add("astor,0.8.1");
sl.Add("astropy,4.0");
sl.Add("atari-py,0.2.6");
sl.Add("atomicwrites,1.3.0");
sl.Add("attrs,19.3.0");
sl.Add("audioread,2.1.8");
sl.Add("autograd,1.3");
sl.Add("Babel,2.8.0");
sl.Add("backcall,0.1.0");
sl.Add("backports.tempfile,1.0");
sl.Add("backports.weakref,1.0.post1");
sl.Add("beautifulsoup4,4.6.3");
sl.Add("bleach,3.1.0");
sl.Add("blis,0.2.4");
sl.Add("bokeh,1.4.0");
sl.Add("boto,2.49.0");
sl.Add("boto3,1.11.15");
sl.Add("botocore,1.14.15");
sl.Add("Bottleneck,1.3.1");
sl.Add("branca,0.3.1");
sl.Add("bs4,0.0.1");
sl.Add("bz2file,0.98");
sl.Add("cachetools,3.1.1");
sl.Add("certifi,2019.11.28");
sl.Add("cffi,1.14.0");
sl.Add("chainer,6.5.0");
sl.Add("chardet,3.0.4");
sl.Add("chart-studio,1.0.0");
sl.Add("Click,7.0");
sl.Add("cloudpickle,1.2.2");
sl.Add("cmake,3.12.0");
sl.Add("colorlover,0.3.0");
sl.Add("community,1.0.0b1");
sl.Add("contextlib2,0.5.5");
sl.Add("convertdate,2.2.0");
sl.Add("coverage,3.7.1");
sl.Add("coveralls,0.5");
sl.Add("crcmod,1.7");
sl.Add("cufflinks,0.17.0");
sl.Add("cvxopt,1.2.4");
sl.Add("cvxpy,1.0.25");
sl.Add("cycler,0.10.0");
sl.Add("cymem,2.0.3");
sl.Add("Cython,0.29.15");
sl.Add("daft,0.0.4");
sl.Add("dask,2.9.2");
sl.Add("dataclasses,0.7");
sl.Add("datascience,0.10.6");
sl.Add("decorator,4.4.1");
sl.Add("defusedxml,0.6.0");
sl.Add("descartes,1.1.0");
sl.Add("dill,0.3.1.1");
sl.Add("distributed,1.25.3");
sl.Add("Django,3.0.3");
sl.Add("dlib,19.18.0");
sl.Add("dm-sonnet,1.35");
sl.Add("docopt,0.6.2");
sl.Add("docutils,0.15.2");
sl.Add("dopamine-rl,1.0.5");
sl.Add("earthengine-api,0.1.213");
sl.Add("easydict,1.9");
sl.Add("ecos,2.0.7.post1");
sl.Add("editdistance,0.5.3");
sl.Add("en-core-web-sm,2.1.0");
sl.Add("entrypoints,0.3");
sl.Add("et-xmlfile,1.0.1");
sl.Add("fa2,0.3.5");
sl.Add("fancyimpute,0.4.3");
sl.Add("fastai,1.0.60");
sl.Add("fastdtw,0.3.4");
sl.Add("fastprogress,0.2.2");
sl.Add("fastrlock,0.4");
sl.Add("fbprophet,0.5");
sl.Add("feather-format,0.4.0");
sl.Add("featuretools,0.4.1");
sl.Add("filelock,3.0.12");
sl.Add("fix-yahoo-finance,0.0.22");
sl.Add("Flask,1.1.1");
sl.Add("folium,0.8.3");
sl.Add("fsspec,0.6.2");
sl.Add("future,0.16.0");
sl.Add("gast,0.2.2");
sl.Add("GDAL,2.2.2");
sl.Add("gdown,3.6.4");
sl.Add("gensim,3.6.0");
sl.Add("geographiclib,1.50");
sl.Add("geopy,1.17.0");
sl.Add("gevent,1.4.0");
sl.Add("gin-config,0.3.0");
sl.Add("glob2,0.7");
sl.Add("google,2.0.3");
sl.Add("google-api-core,1.16.0");
sl.Add("google-api-python-client,1.7.11");
sl.Add("google-auth,1.7.2");
sl.Add("google-auth-httplib2,0.0.3");
sl.Add("google-auth-oauthlib,0.4.1");
sl.Add("google-cloud-bigquery,1.21.0");
sl.Add("google-cloud-core,1.0.3");
sl.Add("google-cloud-datastore,1.8.0");
sl.Add("google-cloud-language,1.2.0");
sl.Add("google-cloud-storage,1.16.2");
sl.Add("google-cloud-translate,1.5.0");
sl.Add("google-colab,1.0.0");
sl.Add("google-pasta,0.1.8");
sl.Add("google-resumable-media,0.4.1");
sl.Add("googleapis-common-protos,1.51.0");
sl.Add("googledrivedownloader,0.4");
sl.Add("graph-nets,1.0.5");
sl.Add("graphviz,0.10.1");
sl.Add("greenlet,0.4.15");
sl.Add("grpcio,1.27.1");
sl.Add("gspread,3.0.1");
sl.Add("gspread-dataframe,3.0.4");
sl.Add("gunicorn,20.0.4");
sl.Add("gym,0.15.6");
sl.Add("h5py,2.8.0");
sl.Add("HeapDict,1.0.1");
sl.Add("holidays,0.9.12");
sl.Add("html5lib,1.0.1");
sl.Add("httpimport,0.5.18");
sl.Add("httplib2,0.11.3");
sl.Add("httplib2shim,0.0.3");
sl.Add("humanize,0.5.1");
sl.Add("hyperopt,0.1.2");
sl.Add("ideep4py,2.0.0.post3");
sl.Add("idna,2.8");
sl.Add("image,1.5.28");
sl.Add("imageio,2.4.1");
sl.Add("imagesize,1.2.0");
sl.Add("imbalanced-learn,0.4.3");
sl.Add("imblearn,0.0");
sl.Add("imgaug,0.2.9");
sl.Add("importlib-metadata,1.5.0");
sl.Add("imutils,0.5.3");
sl.Add("inflect,2.1.0");
sl.Add("intel-openmp,2020.0.133");
sl.Add("intervaltree,2.1.0");
sl.Add("ipykernel,4.6.1");
sl.Add("ipython,5.5.0");
sl.Add("ipython-genutils,0.2.0");
sl.Add("ipython-sql,0.3.9");
sl.Add("ipywidgets,7.5.1");
sl.Add("itsdangerous,1.1.0");
sl.Add("jax,0.1.58");
sl.Add("jaxlib,0.1.38");
sl.Add("jdcal,1.4.1");
sl.Add("jedi,0.16.0");
sl.Add("jieba,0.42.1");
sl.Add("Jinja2,2.11.1");
sl.Add("jmespath,0.9.4");
sl.Add("joblib,0.14.1");
sl.Add("jpeg4py,0.1.4");
sl.Add("jsonschema,2.6.0");
sl.Add("jupyter,1.0.0");
sl.Add("jupyter-client,5.3.4");
sl.Add("jupyter-console,5.2.0");
sl.Add("jupyter-core,4.6.2");
sl.Add("kaggle,1.5.6");
sl.Add("kapre,0.1.3.1");
sl.Add("Keras,2.2.5");
sl.Add("Keras-Applications,1.0.8");
sl.Add("Keras-Preprocessing,1.1.0");
sl.Add("keras-vis,0.4.1");
sl.Add("kfac,0.2.0");
sl.Add("kiwisolver,1.1.0");
sl.Add("knnimpute,0.1.0");
sl.Add("librosa,0.6.3");
sl.Add("lightgbm,2.2.3");
sl.Add("llvmlite,0.31.0");
sl.Add("lmdb,0.98");
sl.Add("lucid,0.3.8");
sl.Add("lunardate,0.2.0");
sl.Add("lxml,4.2.6");
sl.Add("magenta,0.3.19");
sl.Add("Markdown,3.2.1");
sl.Add("MarkupSafe,1.1.1");
sl.Add("matplotlib,3.1.3");
sl.Add("matplotlib-venn,0.11.5");
sl.Add("mesh-tensorflow,0.1.9");
sl.Add("mido,1.2.6");
sl.Add("mir-eval,0.5");
sl.Add("missingno,0.4.2");
sl.Add("mistune,0.8.4");
sl.Add("mizani,0.6.0");
sl.Add("mkl,2019.0");
sl.Add("mlxtend,0.14.0");
sl.Add("more-itertools,8.2.0");
sl.Add("moviepy,0.2.3.5");
sl.Add("mpi4py,3.0.3");
sl.Add("mpmath,1.1.0");
sl.Add("msgpack,0.5.6");
sl.Add("multiprocess,0.70.9");
sl.Add("multitasking,0.0.9");
sl.Add("murmurhash,1.0.2");
sl.Add("music21,5.5.0");
sl.Add("natsort,5.5.0");
sl.Add("nbconvert,5.6.1");
sl.Add("nbformat,5.0.4");
sl.Add("networkx,2.4");
sl.Add("nibabel,2.3.3");
sl.Add("nltk,3.2.5");
sl.Add("notebook,5.2.2");
sl.Add("np-utils,0.5.12.1");
sl.Add("numba,0.47.0");
sl.Add("numexpr,2.7.1");
sl.Add("numpy,1.17.5");
sl.Add("nvidia-ml-py3,7.352.0");
sl.Add("oauth2client,4.1.3");
sl.Add("oauthlib,3.1.0");
sl.Add("okgrade,0.4.3");
sl.Add("opencv-contrib-python,4.1.2.30");
sl.Add("opencv-python,4.1.2.30");
sl.Add("openpyxl,2.5.9");
sl.Add("opt-einsum,3.1.0");
sl.Add("osqp,0.6.1");
sl.Add("packaging,20.1");
sl.Add("palettable,3.3.0");
sl.Add("pandas,0.25.3");
sl.Add("pandas-datareader,0.7.4");
sl.Add("pandas-gbq,0.11.0");
sl.Add("pandas-profiling,1.4.1");
sl.Add("pandocfilters,1.4.2");
sl.Add("parso,0.6.2");
sl.Add("pathlib,1.0.1");
sl.Add("patsy,0.5.1");
sl.Add("pexpect,4.8.0");
sl.Add("pickleshare,0.7.5");
sl.Add("Pillow,6.2.2");
sl.Add("pip-tools,4.2.0");
sl.Add("plac,0.9.6");
sl.Add("plotly,4.4.1");
sl.Add("plotnine,0.6.0");
sl.Add("pluggy,0.7.1");
sl.Add("portpicker,1.3.1");
sl.Add("prefetch-generator,1.0.1");
sl.Add("preshed,2.0.1");
sl.Add("pretty-midi,0.2.8");
sl.Add("prettytable,0.7.2");
sl.Add("progressbar2,3.38.0");
sl.Add("prometheus-client,0.7.1");
sl.Add("promise,2.3");
sl.Add("prompt-toolkit,1.0.18");
sl.Add("protobuf,3.10.0");
sl.Add("psutil,5.4.8");
sl.Add("psycopg2,2.7.6.1");
sl.Add("ptyprocess,0.6.0");
sl.Add("py,1.8.1");
sl.Add("pyarrow,0.14.1");
sl.Add("pyasn1,0.4.8");
sl.Add("pyasn1-modules,0.2.8");
sl.Add("pycocotools,2.0.0");
sl.Add("pycparser,2.19");
sl.Add("pydata-google-auth,0.3.0");
sl.Add("pydot,1.3.0");
sl.Add("pydot-ng,2.0.0");
sl.Add("pydotplus,2.0.2");
sl.Add("PyDrive,1.3.1");
sl.Add("pyemd,0.5.1");
sl.Add("pyglet,1.4.10");
sl.Add("Pygments,2.1.3");
sl.Add("pygobject,3.26.1");
sl.Add("pymc3,3.7");
sl.Add("PyMeeus,0.3.6");
sl.Add("pymongo,3.10.1");
sl.Add("pymystem3,0.2.0");
sl.Add("PyOpenGL,3.1.5");
sl.Add("pyparsing,2.4.6");
sl.Add("pypng,0.0.20");
sl.Add("pyrsistent,0.15.7");
sl.Add("pysndfile,1.3.8");
sl.Add("PySocks,1.7.1");
sl.Add("pystan,2.19.1.1");
sl.Add("pytest,3.6.4");
sl.Add("python-apt,1.6.5+ubuntu0.2");
sl.Add("python-chess,0.23.11");
sl.Add("python-dateutil,2.6.1");
sl.Add("python-louvain,0.13");
sl.Add("python-rtmidi,1.4.0");
sl.Add("python-slugify,4.0.0");
sl.Add("python-utils,2.3.0");
sl.Add("pytz,2018.9");
sl.Add("PyWavelets,1.1.1");
sl.Add("PyYAML,3.13");
sl.Add("pyzmq,17.0.0");
sl.Add("qtconsole,4.7.1");
sl.Add("QtPy,1.9.0");
sl.Add("regex,2019.12.20");
sl.Add("requests,2.21.0");
sl.Add("requests-oauthlib,1.3.0");
sl.Add("resampy,0.2.2");
sl.Add("retrying,1.3.3");
sl.Add("rpy2,2.9.5");
sl.Add("rsa,4.0");
sl.Add("s3fs,0.4.0");
sl.Add("s3transfer,0.3.3");
sl.Add("scikit-image,0.16.2");
sl.Add("scikit-learn,0.22.1");
sl.Add("scipy,1.4.1");
sl.Add("screen-resolution-extra,0.0.0");
sl.Add("scs,2.1.1.post2");
sl.Add("seaborn,0.10.0");
sl.Add("semantic-version,2.8.4");
sl.Add("Send2Trash,1.5.0");
sl.Add("setuptools-git,1.2");
sl.Add("Shapely,1.7.0");
sl.Add("simplegeneric,0.8.1");
sl.Add("six,1.12.0");
sl.Add("sklearn,0.0");
sl.Add("sklearn-pandas,1.8.0");
sl.Add("smart-open,1.9.0");
sl.Add("snowballstemmer,2.0.0");
sl.Add("sortedcontainers,2.1.0");
sl.Add("spacy,2.1.9");
sl.Add("Sphinx,1.8.5");
sl.Add("sphinxcontrib-websupport,1.2.0");
sl.Add("SQLAlchemy,1.3.13");
sl.Add("sqlparse,0.3.0");
sl.Add("srsly,1.0.1");
sl.Add("stable-baselines,2.2.1");
sl.Add("statsmodels,0.10.2");
sl.Add("sympy,1.1.1");
sl.Add("tables,3.4.4");
sl.Add("tabulate,0.8.6");
sl.Add("tblib,1.6.0");
sl.Add("tensor2tensor,1.14.1");
sl.Add("tensorboard,1.15.0");
sl.Add("tensorboardcolab,0.0.22");
sl.Add("tensorflow,1.15.0");
sl.Add("tensorflow-datasets,2.0.0");
sl.Add("tensorflow-estimator,1.15.1");
sl.Add("tensorflow-gan,2.0.0");
sl.Add("tensorflow-hub,0.7.0");
sl.Add("tensorflow-metadata,0.21.1");
sl.Add("tensorflow-privacy,0.2.2");
sl.Add("tensorflow-probability,0.7.0");
sl.Add("termcolor,1.1.0");
sl.Add("terminado,0.8.3");
sl.Add("testpath,0.4.4");
sl.Add("text-unidecode,1.3");
sl.Add("textblob,0.15.3");
sl.Add("textgenrnn,1.4.1");
sl.Add("tflearn,0.3.2");
sl.Add("Theano,1.0.4");
sl.Add("thinc,7.0.8");
sl.Add("toolz,0.10.0");
sl.Add("torch,1.4.0");
sl.Add("torchsummary,1.5.1");
sl.Add("torchtext,0.3.1");
sl.Add("torchvision,0.5.0");
sl.Add("tornado,4.5.3");
sl.Add("tqdm,4.28.1");
sl.Add("traitlets,4.3.3");
sl.Add("tweepy,3.6.0");
sl.Add("typing,3.6.6");
sl.Add("typing-extensions,3.6.6");
sl.Add("tzlocal,1.5.1");
sl.Add("umap-learn,0.3.10");
sl.Add("uritemplate,3.0.1");
sl.Add("urllib3,1.24.3");
sl.Add("vega-datasets,0.8.0");
sl.Add("wasabi,0.6.0");
sl.Add("wcwidth,0.1.8");
sl.Add("webencodings,0.5.1");
sl.Add("Werkzeug,1.0.0");
sl.Add("widgetsnbextension,3.5.1");
sl.Add("wordcloud,1.5.0");
sl.Add("wrapt,1.11.2");
sl.Add("xarray,0.14.1");
sl.Add("xgboost,0.90");
sl.Add("xkit,0.0.0");
sl.Add("xlrd,1.1.0");
sl.Add("xlwt,1.3.0");
sl.Add("yellowbrick,0.9.1");
sl.Add("zict,1.0.0");
sl.Add("zipp,3.1.0");
sl.Add("zmq,0.0.0");
var sbMarkdown = new StringBuilder();
foreach (var item in sl)
{
var parts = item.Split(',');
var name = parts[0];
var version = parts[1];
var url_name = name;
//switch (name)
//{
// case "en-core-web-sm":
// url_name = "en-core-web-sm-mirror";
// break;
// case "screen-resolution-extra":
// // PyPIにないのでスキップする
// continue;
// case "xkit":
// // PyPIにないのでスキップする
// continue;
//}
var pypiUrl = $"https://pypi.org/project/{url_name}/";
var htmlCode = String.Empty;
try
{
using (var client = new WebClient())
{
htmlCode = client.DownloadString(pypiUrl);
}
}
catch (WebException wex)
{
if (((HttpWebResponse)wex.Response).StatusCode == HttpStatusCode.NotFound)
{
// 404エラー
htmlCode = " <p class=\"package-description__summary\">***Does not exist in PyPI index!***</p> ";
}
else
{
throw;
}
}
var matche = Regex.Match(htmlCode,
"<p class=\"package-description__summary\">([^<]*?)</p>",
RegexOptions.IgnoreCase | RegexOptions.Multiline);
var english = matche.Groups[1].Value;
var line = $"- [{name}](https://pypi.org/project/{url_name}/)=={version}: {english}";
sbMarkdown.Append(line + "\r\n");
Console.WriteLine(line);
}
var path = @"C:\Users\masa-i\Desktop\pypi-list.txt";
File.WriteAllText(path, sbMarkdown.ToString());
Console.WriteLine($"Done!- {path}");
}
static void MakeMarkdownText()
{
// 作成されたpypi-list.txtをコピーしてjapanese.txt(UTF-8)を作成して以下の置換を行う
// 検索:\- \[(.*?)\]\((.*?)\)==(.*?):
// 置換:\n\n
// さらにjapanese.txtで以下の置換を行って完成
// 検索:\n\n\n
// 置換:\n
var srcPath = @"C:\Users\masa-i\Desktop\pypi-list.txt";
var pypiList = File.ReadAllLines(srcPath);
var destPath = @"C:\Users\masa-i\Desktop\japanese.txt";
var japaneseList = File.ReadAllLines(destPath);
if (pypiList.Length != japaneseList.Length)
{
Console.WriteLine("行数が違うから確かめて!");
return;
}
var sbMarkdown = new StringBuilder();
var length = pypiList.Length;
for (int i = 0; i < length; i++)
{
var pypi = pypiList[i];
var posEnglish = pypi.IndexOf(": ") + 2;
var japanese = japaneseList[i];
sbMarkdown.Append(
$"{pypi.Substring(0, posEnglish)} \r\n" +
$" {pypi.Substring(posEnglish)} \r\n" +
$" {japanese}\r\n");
}
var path = @"C:\Users\masa-i\Desktop\pypi-markdown.txt";
File.WriteAllText(path, sbMarkdown.ToString());
Console.WriteLine($"Done!- {path}");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment