【问题标题】:Splitting a text file into columns将文本文件拆分为列
【发布时间】:2014-10-31 02:35:38
【问题描述】:

假设我有一个包含以下内容的文本文件:

0100003 01000040100005 01004480100007 01000080100008 00004590100009 01000100100238 01001500100323 01005030100013

我希望程序做的是在数出 15 个字符后按计算机上的“ENTER”键。到目前为止,我应该做的是获取一个文本文件,反转输出,并将其添加到原始文本中。然后我需要像这样拆分它。我已经完成了反转和添加的代码。 一个可以

f = open("rrEdges.txt", "rb")

s = f.read()

f.close()

f = open("newtext.txt", "wb")

f.write(s[::-1])

f.close()


with open ("rrEdges.txt", "r") as myfile:
    data=myfile.read().replace('\n', '')



with open ("newtext.txt", "r") as myfile:

    data += myfile.read().replace('\n', '')


temp ="" + data

open("rrEdges.txt","w").close()

text_file = open("rrEdges.txt", "w")

text_file.write(temp)

我不知道如何解决这个问题,但对于一些有经验的用户来说应该很简单。因此,例如,最终结果将如下所示:

0100003 0100004

0100005 0100448

0100007 0100008

0100008 0000459

0100009 0100010

0100238 0100150

0100323 0100503

0100013

(但行之间没有空行)

更新:我试过了

with open ("rrEdges.txt", "r") as myfile:

    data=myfile.read().replace('\n', '')

open("rrEdges.txt","w").close()

text_file = open("rrEdges.txt", "w")

string1=data+""

for i in range(len(string1)//15):

    text_file.write(string1[i*15:(i+1)*15])

【问题讨论】:

  • 到目前为止你得到了什么代码?
  • 到目前为止,我应该做的是获取一个文本文件,反转输出,并将其添加到原始文本中。然后我需要像这样拆分它。我已经完成了反转和添加的代码。
  • “我希望程序做的是按我电脑上的“ENTER”键”——除非你有 USB roboarm 或其他东西,否则这是不可行的。很明显,您想要换行,但是,根据键盘上的人会做什么来考虑它可能会将您的注意力从程序采用的最佳方法上转移开。

标签: python string text split text-files


【解决方案1】:
s="0100003 01000040100005 01004480100007 01000080100008 00004590100009 01000100100238 01001500100323 01005030100013"

print("\n".join([s[i:i+15] for i in range(0,len(s),15)]))

0100003 0100004
0100005 0100448
0100007 0100008
0100008 0000459
0100009 0100010
0100238 0100150
0100323 0100503
0100013

要写入文件,只需将 print 替换为 write:

with open("out.txt","w") as f:
 f.write("\n".join([s[i:i+15] for i in range(0,len(s),15)]))

文件的输出如下:

0100003 0100004
0100005 0100448
0100007 0100008
0100008 0000459
0100009 0100010
0100238 0100150
0100323 0100503
0100013

【讨论】:

  • 查看更新,如果有任何区别,我想写入文本文件
  • 你可以用 write 代替 print
  • 让我试试看效果如何
  • 干杯伙伴!不得不稍微编辑一下我的旧代码,但我让它工作了。谢谢!
【解决方案2】:
string1="0100003 01000040100005 01004480100007 01000080100008 00004590100009 01000100100238 01001500100323 01005030100013"
for i in range(len(string1)//15):
    print string1[i*15:(i+1)*15]

【讨论】:

  • 我希望它以该格式将其写入文本文件。查看问题底部的更新
【解决方案3】:

你可以像下面这样使用re.findall

>>> s = "0100003 01000040100005 01004480100007 01000080100008 00004590100009 01000100100238 01001500100323 01005030100013"
>>> m = re.findall(r'.{15}|.+', s)
>>> for i in m:
...     print i
... 
0100003 0100004
0100005 0100448
0100007 0100008
0100008 0000459
0100009 0100010
0100238 0100150
0100323 0100503
0100013

【讨论】:

  • 谢谢,但帕德里亚克先回答,他的回答有效!如果可以的话,会给所有 3 个最好的答案,但不幸的是,这是不可能的。无论如何感谢您的帮助!
【解决方案4】:

添加到 Avinash 的答案中,可以使用 re.finditer() 而不是 re.findall() 来循环遍历迭代器对象而不是列表,从而减少创建列表的开销(从性能的角度来看)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多