1

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

假设<tab>实际上是一个选项卡,<space>实际上是一个空格。(忽略引号)

"

    <tab><tab>

    <space>
    <tab>
    The clothes at
    the superstore are
    at a discount today.
"

假设这是在一个文本文件中。如何删除所有空格,以便生成的文本文件是(忽略引号:

"
    The clothes at
    the superstore are
    at a discount today.
"
4

5 回答 5

1

可能是这样的(不知道您是否需要 python 解决方案或者 cmdline-tools 是否可以):

$ cat -t INPUT
   ^I^I
^I^I
"^I
^I^I^I
^I  ghi
"

$ sed '/^[      ]*$/d' INPUT
"   
      ghi
"

即删除仅包含空格/和/或制表符以及空石灰的行。

于 2013-05-23T13:17:59.620 回答
1

试试这个,假设你不想覆盖旧文件。如果你这样做很容易适应:

oldfile = open("EXISTINGFILENAME", "r")
data = oldfile.read()
oldfile.close()
stripped_data = data.lstrip()
newfile = open("NEWFILENAME", "w")
newfile.write(stripped_data)
newfile.close()

请注意,这只会删除前导空格,要删除任何尾随空格,请使用strip.lstrip

于 2013-05-23T13:20:01.460 回答
1

如果要在输出文件中的行上保留缩进和尾随空格,请测试剥离的行,但写入原始行。

这也使用上下文管理器,并在 Python 2.7 中工作:

with open('EXISTINGFILE', 'r') as fin, open('NEWFILE', 'w') as fout:
    for line in fin:
        if line.strip():
           fout.write(line)

如果您想做其他处理,我建议在它自己的函数体中定义它,并调用该函数:

def process_line(line):
    # for example
    return ''.join(('Payload:\t', line.strip().upper(), '\tEnd Payload\n'))

with open('EXISTINGFILE', 'r') as fin, open('NEWFILE', 'w') as fout:
    for line in fin:
        if line.strip():
           fout.write(process_line(line))

重读您的问题,我看到您只询问了删除文件开头的空格。如果您想在满足某个条件后获取源文件的每一行,您可以为该条件设置一个标志,并根据该标志切换您的输出。

例如,如果您想删除初始的空白行,处理非空白行,并且在至少有一行数据之后不删除或处理所有空白行,您可以这样做:

def process_line(line):
    # for example
    return ''.join(('Payload:\t', line.strip().upper(), '\tEnd Payload\n'))

with open('EXISTINGFILE', 'r') as fin, open('NEWFILE', 'w') as fout:
    have_paydata = False
    for line in fin:
        if line.strip():
           have_paydata = True if not have_paydata
           fout.write(process_line(line))
        elif have_paydata:
           fout.write(line)
于 2013-05-23T13:40:16.580 回答
0

strip()删除所有前导/尾随空格,然后在我们执行该测试之后,是否有任何字符留在该行中:

with f as open("file.txt", "r"):
    for line in f:
        if len(line.strip()):
            print line
于 2013-05-23T13:18:32.997 回答
0

lstrip将删除字符串开头的所有空格。如果您需要在第一行保留前导空格,请改用正则表达式:

import re

data = '''\

    \t\t


    \t
    The clothes at
    the superstore are
    at a discount today.
'''

# Remove ALL whitespace from the start of string
print(data.lstrip())
# Remove all whitespace from start of string up to and including a newline
print(re.sub(r'^\s*\n',r'',data))

输出:

The clothes at
    the superstore are
    at a discount today.

    The clothes at
    the superstore are
    at a discount today.

要以这种方式修改文件:

# A with statement closes the file on exit from the block
with open('data.txt') as f:
    data = f.read()
data = re.sub(r'^\s*\n',r'',data))
with open('data.txt','w') as f:
    f.write(data)
于 2013-05-23T13:32:45.373 回答