我正在学习python 3,我喜欢把自己想象成一个初学者。
我尽可能简单地说明这个问题,我正试图在.txt文件中添加空格。这听起来很容易,但它让我很难过。
所以我有这个巨大的双星文本文件,它们的坐标称为华盛顿双星目录。下载产生一个包含30084行文本的文本文件。我知道我将始终需要在每一行中放置10个字符的空格,然后在接下来的2-4行之后有条件地删除一个空格。
例如
label.text
插入的空间位于" 8"和" S。"在这种情况下,我还需要删除" T"之间的空格。和#34; 125。"
一旦我知道如何递归编辑每一行,我就可以处理空白条件格式。我理解它将与函数和循环有关。我也得到了python来读取文件。
我尝试这样做的主要原因是将其导出为excel,因为WDS标识符和发现者代码之间缺少空格会导致导入。
非常感谢任何建议。
感谢。
答案 0 :(得分:0)
虽然可以在您指定的位置插入空格,但我认为这是一个糟糕的策略。例如,空字段由空格表示,因此当它们不为空时它们会很好地读取,但是当它们为空时它们将与相邻的字段合并。除了你提到的内容之外,还有其他字段可以包含内部空间。
我认为更好的方法是:根据WDS Bible format codes将线分成单独的字符串;从一开始就剥离白色空间和这些字符串;用下划线(_)替换内部空格;将数据退回选项卡分隔。
以下是我对此的实现。我的' Xn'代码表示WDS格式的空白区域:
import re
import sys
FORMAT_CODES = [ \
'A10', 'A7', 'A5', 'X1', 'I4', 'X1', 'I4', 'X1', 'I4', \
'X1', 'I3', 'X1', 'I3', 'X1', 'F5.1', 'X1', 'F5.1', \
'X1', 'F5.2', 'X1', 'F5.2', 'X1', 'A9', 'X1', 'I4', \
'I4', 'X1', 'I4', 'I4', 'X1', 'A8', 'X1', 'A4', 'X1', 'A18', \
]
def format_length(fmt):
match_object = re.match(r'[A-Z](\d+)', fmt)
assert match_object is not None
return int(match_object.group(1))
format_lengths = [format_length(code) for code in FORMAT_CODES] # optimization
with open(sys.argv[1]) as catalog:
for line in catalog:
start = 0
data = []
for index, code in enumerate(FORMAT_CODES):
stop = start + format_lengths[index]
if not code.startswith('X'):
string = line[start:stop]
data.append(string.strip().replace(' ', '_'))
start = stop
print(*data, sep='\t')
在我的系统上,此代码能够在手动剥离非数据标题行后约2秒内处理30K行00-06小时部分。