テキストファイルを分割し、自分の好きなように名前をつける。
Q&A
Closed
解決したいこと
何百行もあるテキストファイルから2行ずつ抜き出して、それぞれテキストファイルに分割するというコードはどう書くのかと質問し、教えていただきました。
それが以下のコードです。
import os
out_dir = './output/'
os.makedirs(out_dir, exist_ok = True)
# 愚直実装
with open("points.txt") as f:
lines = f.readlines()
for i in range(len(lines) // 2):
with open(os.path.join(out_dir, f"{i}.txt"), "w") as output:
index = lines[i * 2]
text = lines[i * 2 + 1]
output.writelines(lines[i * 2: (i + 1) * 2])
# 最初でまとめる方法
with open("points.txt") as f:
lines = f.readlines()
lines = [lines[i: i + 2] for i in range(0, len(lines), 2)]
for i, (index, text) in enumerate(lines):
with open(os.path.join(out_dir, f"{i}.txt"), "w") as output:
output.writelines(index + text)
ここから、「生成されるテキストファイルの名前を自分の作ったリストから作る」ということをしようとしました。
import os
out_dir = './output/'
os.makedirs(out_dir, exist_ok = True)
#配列の例(実際は生成されるテキストファイルの数だけ要素はある)
with open("名前.txt") as t:
a = t.read().splitlines()
#for j in a: を追加し、f"{i}.txtをf"{j}.txtに変更した
for j in a:
with open("points.txt") as f:
lines = f.readlines()
for i in range(len(lines) // 2):
with open(os.path.join(out_dir, f"{j}.txt"), "w") as output:
index = lines[i * 2]
text = lines[i * 2 + 1]
output.writelines(lines[i * 2: (i + 1) * 2])
のようにjをもってきてwith open(os.path.join(out_dir, f"{j}.txt"), "w") as output:のi→jに変えればできると思ったのですが、たしかに名前は自分の用意したリストどうりの名前に変わりましたが、肝心の中身がすべて同じ内容になってしまいました。
どうすれば中身を変えずに名前を自分の用意したリストに変更すればよいのでしょうか。
ご教授お願いします。
0