python读取txt文件,提取指定行和列数据,输出到新文件
时间: 2024-05-16 21:12:11 浏览: 163
可以使用Python中的文件读写函数和切片语法来实现该功能。以下是一个简单的代码示例:
```python
# 打开文件,读取所有行
with open('input.txt', 'r') as f:
lines = f.readlines()
# 提取第1、3、5行和第2、4、6列的数据
data = [[lines[i].split()[j+1] for j in range(2)] for i in range(0, 6, 2)]
# 将数据写入到新文件
with open('output.txt', 'w') as f:
for row in data:
f.write('\t'.join(row) + '\n')
```
这段代码可以读取名为input.txt的文件,提取第1、3、5行和第2、4、6列的数据,并将结果写入到名为output.txt的新文件中。
相关问题
用python读取文件提取第10行以后,第18到20列的数据,如果该行没有数据就跳过,输出到另外一个txt文件里面
可以使用pandas库来读取文件和提取数据,具体实现如下:
```python
import pandas as pd
# 读取原始文件,指定分隔符和列名
df = pd.read_csv('input.txt', sep='\t', header=None, names=['col{}'.format(i) for i in range(1, 21)])
# 提取第10行以后,第18到20列的数据
df = df.iloc[9:, 17:20]
# 去除空值行
df = df.dropna(how='all')
# 输出到另外一个txt文件里面
df.to_csv('output.txt', sep='\t', index=False, header=None)
```
解释一下每个步骤的含义:
1. 使用pandas的read_csv方法读取原始文件,并指定分隔符为制表符(`sep='\t'`),同时不使用文件中的列名(`header=None`)。
2. 由于没有指定列名,需要手动为每一列指定一个名称,这里使用了列表推导式。
3. 使用iloc方法提取第10行以后,第18到20列的数据,注意这里的行和列索引都是从0开始的。
4. 使用dropna方法去除空值行,这里的参数how='all'表示只有当一行中所有列都为空值时才会被删除。
5. 使用to_csv方法将提取的数据输出到另一个txt文件中,指定分隔符为制表符(`sep='\t'`),不输出行索引和列名(`index=False, header=None`)。
python读取txt文件指定内容
以下是一个Python读取txt文件中指定内容的例子:
```python
def get_data(file_path, skip_rows, target, target_data_len):
"""
从txt文件中提取指定内容
:param file_path: 文件路径
:param skip_rows: 跳过的行数
:param target: 目标内容
:param target_data_len: 目标内容的长度
:return: 目标内容列表
"""
data_list = []
with open(file_path, 'r') as f:
for i in range(skip_rows):
f.readline() # 跳过前skip_rows行
for line in f:
if target in line:
data = line.strip().split()[1:target_data_len+1]
data_list.append(data)
return data_list
```
这个函数可以从指定的txt文件中提取目标内容,并将其保存在一个列表中返回。其中,`file_path`是文件路径,`skip_rows`是需要跳过的行数,`target`是目标内容的标识,`target_data_len`是目标内容的长度。函数会返回一个包含目标内容的列表。
例如,如果我们有一个名为`data.txt`的文件,其中包含以下内容:
```
x1: 1 2 3
x2: 4 5 6
test3: 7 8 9
y4: 10 11 12 13 14 15
```
我们可以使用以下代码来提取`x1`、`test3`和`y4`的数据:
```python
data_path = "data.txt"
# 提取x1的数据
list_x1 = get_data(data_path, 0, target="x1:", target_data_len=3)
# 提取test3的数据
list_test3 = get_data(data_path, 0, target="test3:", target_data_len=3)
# 提取y4的数据
list_y4 = get_data(data_path, 0, target="y4:", target_data_len=6)
print(list_x1) # 输出:[['1', '2', '3']]
print(list_test3) # 输出:[['7', '8', '9']]
print(list_y4) # 输出:[['10', '11', '12', '13', '14', '15']]
```
阅读全文