Pythonでタブ文字(\t)を出力しても、コピー時にスペースになる問題とその対策

※当サイトではアフィリエイト広告を利用しています

Python の print()\t(タブ文字)を使って整形出力したとき、ターミナル上では綺麗に揃って見えるのに、コピーするとスペースに変換されてしまう——そんな経験はありませんか?

今回は、この問題の原因と対処法を考えてみます。


問題の概要

以下のような Python コードがあります:

print("A\tB\tC")

この出力は、ターミナル上ではタブ区切りで綺麗に表示されますが、マウスでコピーしてペーストするとタブがスペースに変わっていることがあります

特に以下のような環境で発生しやすいです:

  • cursor ターミナル
  • macOS の Terminal.app
  • VSCode のターミナル
  • Windows Terminal

原因

ターミナルは \t を視覚的に スペースで表示しており、コピー時もスペースとして扱う仕様のことが多いです。

そのため、見た目はタブでも、実際にコピーされるのはスペースになってしまいます。


タブ文字を正しくコピーする方法(対策)

✅ 方法1:pyperclip を使ってタブ付きの文字列を直接クリップボードへ送る(推奨)

pip install pyperclip
import pyperclip

text = "A\tB\tC"
print(text) # 表示もしたいならこれ
pyperclip.copy(text) # タブ付きのままクリップボードへコピー

これで、ペーストしてもタブがそのまま維持されます


✅ 方法2:出力をファイルに保存し、そこからコピーする

with open("output.txt", "w") as f:
f.write("A\tB\tC\n")

保存された output.txt をエディタ(VSCodeなど)で開けば、タブ文字のままコピー可能です。


✅ 方法3:OSのクリップボード機能を直接使う

macOS(pbcopy

import subprocess

text = "A\tB\tC\n"
subprocess.run("pbcopy", input=text.encode())

Linux(xclip

import subprocess

text = "A\tB\tC\n"
subprocess.run("xclip -selection clipboard", input=text.encode(), shell=True)

補足:出力が本当にタブか確認する方法

print(repr("A\tB\tC"))

出力:

'A\tB\tC'

このように \t が表示されていれば、ちゃんとタブ文字が含まれています。


まとめ

方法タブが維持されるか備考
ターミナルから手動コピー多くのターミナルではスペースに変換される
pyperclip でコピーPython から直接クリップボードに送る。おすすめ
ファイル保存 → コピーエディタ経由ならタブも維持されやすい
pbcopy / xclipOS のクリップボードを直接操作する方法

おわりに

ターミナル上の出力を使って資料や CSV を作るときなど、タブがスペースに変換されると地味に面倒ですよね。Python でタブ文字を正しくコピーしたいときは、ぜひ今回紹介した方法を活用してください。

コメント