CSVから表生成

CSV to Table

CSVファイルからMarkdown形式の表をテキストファイルとして出力するソースを書きました。
たぶんこれもわざわざ自分で書くほどの機能ではないと思うんですが、自分で使うものを自分で書くのは楽しいですね。
ダウンロードできるようにしてありますので気になった方は自己責任で使ってみてください。
zipファイルを解答するとルートディレクトリにcsv_to_table.pyとdataディレクトリが入っています。
dataディレクトリにはoutディレクトリとsrcディレクトリがあり、srcディレクトリにはサンプルデータ(sample.csv)が入っています。
ルートディレクトリから以下のようにコマンドを打つとoutディレクトリにMarkdown記法の表に変換されたtxt形式ファイルが生成されます。

$python csv_to_table.py sample.csv

なお、任意の引数として変換対象CSVファイルの次にcenterなどのモードを指定すると、セル内の文字を揃える方向を指定できます。
標準モジュールしか使ってないので何かしらのモジュールのインストールが必要ということはない...はず。

出力例

以下はモードを指定しない場合。

(CSV)
name,age,country
John,18,US
Mary,19,UK

(Table: テキストファイル)
|name|age|country|
|---|---|---|
|John|18|US|
|Mary|19|UK|

ソース


import sys
import csv
import re

# *
# *
# * csv_to_table.py
# * geschrieben von Beliar698ma
# * First: 2026.01.07
# *
# *

source_directory = 'data/src/'
output_directory = 'data/out/'

args = sys.argv
source_path_name = source_directory + args[1]

mode_name = ''
if len(args) > 2:
  mode_name = args[2]

patterns = [re.compile(r'center', re.IGNORECASE), re.compile(r'left', re.IGNORECASE), re.compile(r'right', re.IGNORECASE)]
selected_mode = ''

for i in range(len(patterns)):
  if re.match(patterns[0], mode_name):
    selected_mode = ':---:'
  elif re.match(patterns[1],mode_name):
    selected_mode = ':---'
  elif re.match(patterns[2], mode_name):
    selected_mode = '---:'
  else:
    selected_mode = '---'


with open(source_path_name, newline = '', encoding = 'utf-8') as file:
  reader = csv.reader(file)
  result = []

  header = list(next(reader))
  column_numbers = len(header)
  result.append('|' + ('|'.join(header)) + '|\n')
  table_header = []
  for i in range(column_numbers):
    table_header.append(selected_mode)

  table_header_str = '|' + ('|'.join(table_header)) + '|\n'
  result.append(table_header_str)

  for row in reader:
    converted_table = '|' + ('|'.join(row)) + '|\n'
    result.append(converted_table)

  output_text_file = open(output_directory + 'table.txt', 'w')
  output_text_file.writelines(result)
  output_text_file.close()
  print('Conversion from CSV to txt has been successfully done.')