我有一堆数字用制表符分隔的新行字符看起来像这样:
104 109 105 110 126 119 97 103\n
114 129 119 130 122 106 117 128\n
等等。如何使用python将所有这些数字写入一列中的文件?即。
104\n
109\n
105\n
110\n
126\n
等等。对python来说相当新,所以感谢任何帮助,谢谢!
答案 0 :(得分:2)
最简单的方法是使用sed
。但是如果必须使用Python,则需要用换行符替换所有制表符。尝试这样的事情:
with open('input_file', 'rb') as infile:
with open('output_file', 'wb') as outfile:
for line in infile:
outfile.write(line.replace('\t', '\n'))
答案 1 :(得分:1)
"\n".join("104 109 105 110 126 119 97 103\n 114 129 119 130 122 106 117 128\n".split())
答案 2 :(得分:0)
将input_filename和output_filename替换为适当的值。
f = open('input_filename','r')
nums = f.read().split()
f.close()
f = open('output_filename', 'w')
f.write('\n'.join(nums))
f.close()
[编辑]重写的示例,不将整个文件加载到内存中。它现在与Chinmay Kanchi的例子非常相似。但我在使用替换时使用split。
with open('input_filename','r') as input:
with open('output_filename', 'w') as output:
for line in input:
output.write('\n'.join(line.split()))
output.write('\n')
答案 3 :(得分:0)
有多种方法可以解决这个问题。您可以使用string.split
和string.join
,但这似乎效率低下,因为您将字符串转换为元组并返回字符串。
使用正则表达式,我们用换行符替换一个或多个空格字符。元字符\s
表示任何空白字符),在Python 2.7.1中等同于[ \t\n\r\f\v]
(如果设置了UNICODE,可能还有其他空白字符)。
import re
input_file = open('input_filename','r')
output_file = open('output_filename', 'w')
for line in input_file:
output_file.write(re.sub('[\s]+','\n', line))
input_file.close()
output_file.close()
答案 4 :(得分:0)
如果文件较小,可以使用file.readlines()
将所有行读入内存:
with open('input.txt', 'r') as fin:
for row in [l.split() for l in fin.readlines()]:
for col in row:
print col
如果文件非常大,请一次读取一行内存(我喜欢使用生成器):
for row in open('input.txt'):
for col in row.split():
print col
在任何一种情况下,您都可以将输出传递给新文件:
python myscript.py >output.txt