把文本文件中内容以行的方式读出,可以跳过空格等字符

本文详细解析了使用C语言通过文件指针进行文件读取操作,并展示了如何将读取的内容按照换行符分割成多行文本,进一步处理并输出每行内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <memory.h>
#include <stdlib.h>


int main()
{
  char *filename="c://filelist.txt";
  FILE *fp;
  fp=fopen(filename,"r");
 
  if(!fp){
     printf("can't open file %s/n",filename);
  return 0;
  }
 
  char buf[512];
  int i=0,count=1;
  int ch;
  while(!feof(fp)){
      ch=getc(fp);
      if(ch=='/n'){
    if(i>0){ //不是一个空行
       buf[i]=0;
    printf("NO.%d: %s/n",count,buf);
       count++;  
    i=0;
    }
   }else{
          buf[i]=ch;
    i++;
   }
  }
  fclose(fp);


  return 0;
}

<think>我们讨论的是如何用NumPy从文本文件读取二维数组。根据引用,NumPy提供了多种方法,但针对文本文件txt),主要使用`np.loadtxt`或`np.genfromtxt`函数。虽然引用[1][2]提到了`np.savetxt`(用于保存),但读取部分我们可以参考引用[3][4][5]中提到的从文件读取数据的方法。关键点:1.文本文件格式:通常每代表二维数组的一,元素之间由分隔符(如空格、逗号等)隔开。2.函数选择:-`np.loadtxt`:适用于格式整齐的文本数据(无缺失值)。-`np.genfromtxt`:功能更强大,可处理缺失值、不同分隔符、跳过等。具体方法:###1.使用`np.loadtxt`读取标准格式文本```pythonimportnumpyasnp#文件路径,分隔符默认为空格(可指定)data=np.loadtxt('data.txt',delimiter=None,dtype=np.float64)```参数说明:-`fname`:文件名-`delimiter`:分隔符,如`','`(逗号分隔)、`'\t'`(制表符)等,默认是空格-`dtype`:数据类型,默认为`float`-`skiprows`:跳过开头几(如标题)-`usecols`:指定读取的列(如`(0,2,4)`表示只读第0,2,4列)示例文件`data.txt`内容:```1.02.03.04.05.06.07.08.09.0```###2.使用`np.genfromtxt`读取复杂格式文本```pythondata=np.genfromtxt('data.csv',delimiter=',',skip_header=1,filling_values=0)```参数说明:-`filling_values`:缺失值填充(如`np.nan`或指定值)-`skip_header`:跳过开头数(同`skiprows`)-支持更多数据清洗功能###3.处理混合数据类型(非数值数据)当文本中包含非数值数据(如字符串),需使用`dtype`参数指定每列类型:```python#示例:第一列整数,第二列字符串,第三列浮点数data=np.genfromtxt('mixed_data.txt',dtype=['int32','U20','float64'],delimiter=',')```###4.跳过注释和空```pythondata=np.loadtxt('data.txt',comments='#')#跳过以#开头的```###性能优化建议-对于大型文件(>100MB),考虑分块读取或使用`pandas`(`pd.read_csv`)再转NumPy数组-明确指定`dtype`减少内存占用(如用`np.float32`代替默认的`np.float64`)###示例:读取逗号分隔的CSV文本文件`data.csv`:```csvx,y,z1.5,2.3,7.84.1,5.9,6.2```读取代码:```pythondata=np.loadtxt('data.csv',delimiter=',',skiprows=1)#跳过标题```输出结果:```array([[1.5,2.3,7.8],[4.1,5.9,6.2]])```###注意事项1.文件路径:确保路径正确(相对路径或绝对路径)2.编码问题:非ASCII字符文件需指定`encoding`(引用[4]提到编码问题,但`loadtxt`在Python3默认UTF-8)3.缺失值处理:`genfromtxt`支持缺失值填充(如`filling_values=-999`)§§相关问题§§1.如何读取包含字符串和数值的混合数据文本文件?2.`np.loadtxt`和`np.genfromtxt`的主要区别是什么?3.如何处理大型文本文件(超过内存大小)?</think>### 使用 NumPy 从文本文件读取二维数组的方法 以下是高效读取文本文件为二维 NumPy 数组的完整指南,结合引用内容和最佳实践: #### 1. **基础读取方法:`np.loadtxt()`** ```python import numpy as np # 读取空格分隔的文本文件 array_2d = np.loadtxt('data.txt') # 默认空格分隔,float类型 # 读取逗号分隔的CSV array_2d = np.loadtxt('data.csv', delimiter=',') # 指定数据类型(提高效率) array_2d = np.loadtxt('data.txt', dtype=np.float32) ``` **特点**: - 默认处理数值数据(整数/浮点数)[^3] - 自动处理多数据形成二维数组 - 间复杂度:$O(n)$,$n$为数据点数量 #### 2. **高级读取:`np.genfromtxt()`(处理复杂格式)** ```python # 跳过标题,处理缺失值 array_2d = np.genfromtxt('data.txt', skip_header=1, # 跳过标题 filling_values=0, # 缺失值填充0 delimiter='\t') # 制表符分隔 # 处理混合数据类型(数值+字符串) data = np.genfromtxt('mixed_data.csv', delimiter=',', dtype=None, # 自动推断类型 encoding='utf-8') # 指定编码[^4] ``` **适用场景**: - 含标题/注释的文件(使用`skip_header`/`comments`参数) - 含缺失值的文件(`filling_values`) - 混合数据类型文件(数值+字符串)[^4] #### 3. **大型文件优化技巧** ```python # 分块读取(内存不足) chunks = [] with open('large_data.txt') as f: for chunk in np.loadtxt(f, max_rows=10000): # 每次读1万 chunks.append(chunk) array_2d = np.vstack(chunks) # 指定列读取(减少内存) array_2d = np.loadtxt('data.txt', usecols=(0, 2, 4)) # 只读第0,2,4列 ``` #### 4. **二进制格式优化(超大数据集)** ```python # 保存为.npy格式(先转换后存储) np.save('data.npy', array_2d) # 保存为二进制 # 读取零内存复制 mmap_array = np.load('data.npy', mmap_mode='r') # 内存映射[^5] ``` **优势**: - 比文本格式快5-10倍 - 支持$>10^9$元素级别数据 - 内存映射(mmap)实现零复制访问[^5] --- ### 参数详解表 | 参数 | 说明 | 示例值 | |------|------|--------| | `delimiter` | 列分隔符 | `','`, `'\t'`, `' '` | | `dtype` | 数据类型 | `np.int32`, `np.float64` | | `skiprows` | 跳过数 | `1` (跳过标题) | | `usecols` | 读取的列索引 | `(0, 2, 4)` | | `encoding` | 文件编码 | `'utf-8'`, `'latin1'`[^4] | | `mmap_mode` | 内存映射模式 | `'r'` (只读), `'r+'` (可写) | > **典型应用场景**: > - 科学计算数据:`np.loadtxt('measurements.txt')` > - CSV表格数据:`np.genfromtxt('table.csv', delimiter=',', skip_header=1)` > - 大型数据集:`np.load('bigdata.npy', mmap_mode='r')` #### 注意事项 1. **编码问题**:Python 2生成的文件需指定`encoding='latin1'`[^4] 2. **混合数据类型**:使用`dtype=None`让NumPy自动推断每列类型 3. **性能临界点**: - <1GB数据:`loadtxt()`足够快 - >1GB数据:优先使用二进制`.npy`格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pick

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值