我有一个文本文件,我想用Python进行转置。
例如,给定以下文件:
asdfg
qwert
我希望脚本的输出是一个包含以下内容的文本文件:
aq
sw
de
fr
gt
最简单,最“pythonic”的方法是什么?我能够想出的最多就是将第一个文件的数据读入数组。
答案 0 :(得分:0)
<强>设置强>
首先让我们为那些尚未设置它的人设置我们的文件,但您可以跳到下面的阅读部分,只需确保更改文件路径变量以反映文件的位置和名称:
import textwrap
# dedent removes the extra whitespace in front of each line
text = textwrap.dedent("""
asdfg
qwert""").strip() # strip takes off the first newline
filepath = '/temp/foo.txt'
with open(filepath, 'w') as writer:
writer.write(text)
阅读文件
现在我们已经准备好了文件,让我们使用with
上下文管理器将其读回文本变量(所以如果我们有错误,它会自动为我们关闭文件,我们可以很容易地恢复。):
with open(filepath, 'rU') as reader:
text = reader.read()
操纵文字
这就是魔术,分割文本的行,以便我们有两个字符串的列表,将该列表扩展为两个参数(*
)传递给zip
然后按字符顺序遍历字符串,用空字符串连接对,然后打印该列表的每个成员:
list_of_strings = [''.join(chars) for chars in zip(*text.splitlines())]
for string_i in list_of_strings:
print(string_i)
应该打印
aq
sw
de
fr
gt
答案 1 :(得分:0)
利用readlines()
获取每行的列表。
对于干净的方法,请尝试zip:
a = "asdfg"
b = "qwert"
print zip(a, b)
给出:
[('a', 'q'), ('s', 'w'), ('d', 'e'), ('f', 'r'), ('g', 't')]
从那里,遍历每个元素并打印出结果。
答案 2 :(得分:0)
也许这就是你想要的:
with open("/Users/wy/Desktop/wy.txt", "r") as cin:
lines = cin.read()
lineStr = lines.split('\n')
with open("/Users/wy/Desktop/res.txt", "w") as cout:
for ele in zip(*lineStr):
cout.write(''.join(list(ele)) + '\n')