处理txt文件,每行是一个字符串,要求将每行字符串len小于2的行去掉

你可以使用Python来处理一个文本文件,去掉每行字符串长度小于2的行。以下是一个示例代码:

```python
def filter_short_lines(input_file, output_file):
    with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
        for line in infile:
            line = line.strip()  # 去掉行首尾的空白字符
            if len(line) >= 2:
                outfile.write(line + '\n')

# 示例用法
input_file = 'input.txt'
output_file = 'output.txt'
filter_short_lines(input_file, output_file)
```

### 代码解释:
1. **`filter_short_lines` 函数**:
   - 接受两个参数:`input_file` 和 `output_file`,分别表示输入文件和输出文件的路径。
   - 使用 `with open(input_file, 'r') as infile` 打开输入文件进行读取,使用 `with open(output_file, 'w') as outfile` 打开输出文件进行写入。
   - 遍历输入文件的每一行,使用 `strip()` 方法去掉行首尾的空白字符。
   - 如果去掉空白字符后的字符串长度大于等于2,则将该行写入输出文件。

2. **示例用法**:
   - `input_file` 是输入文件的路径,`output_file` 是输出文件的路径。
   - 调用 `filter_short_lines` 函数,处理输入文件并将结果写入输出文件。

### 注意事项:
- 如果输入文件中包含空行(即只有换行符的行),这些空行也会被去掉,因为它们的 `len` 为0。
- 如果输入文件中包含只有空白字符的行(如空格、制表符等),这些行也会被去掉,因为它们的 `len` 为0。

采用shell命令实现同样的上述操作。

你可以使用 `awk` 或 `sed` 等 Shell 命令来实现相同的功能。以下是使用 `awk` 和 `sed` 的示例:

### 使用 `awk` 命令

```sh
awk 'length($0) >= 2' input.txt > output.txt
```

### 使用 `sed` 命令

```sh
sed -n '/^.\{2,\}$/p' input.txt > output.txt
```

### 解释:

#### 使用 `awk` 命令:
- `length($0) >= 2`:`$0` 表示当前行,`length($0)` 计算当前行的长度。如果长度大于等于2,则保留该行。
- `input.txt`:输入文件。
- `> output.txt`:将结果输出到 `output.txt` 文件。

#### 使用 `sed` 命令:
- `-n`:禁止自动打印模式空间的内容。
- `/^.\{2,\}$/p`:正则表达式匹配。`^` 表示行首,`$` 表示行尾,`.\{2,\}` 表示至少两个字符。`p` 表示打印匹配的行。
- `input.txt`:输入文件。
- `> output.txt`:将结果输出到 `output.txt` 文件。

### 注意事项:
- `awk` 和 `sed` 都是强大的文本处理工具,适用于不同的场景。`awk` 更适合处理结构化的文本数据,而 `sed` 更适合进行简单的文本替换和过滤。
- 如果你需要处理包含空白字符的行(如空格、制表符等),`awk` 和 `sed` 的默认行为可能会有所不同,你可以根据需要调整正则表达式。

你可以根据你的需求选择使用 `awk` 或 `sed` 命令。

猜你喜欢

转载自blog.csdn.net/SPESEG/article/details/143201980