最近准备重新研究一下推荐系统的东西,用到的数据集是Audioscrobbler音乐数据集。我用python处理数据集中artist_data.txt这个文件的时候,先读取每一行然后进行处理:

with open('artist_data.txt','r')as f:

  for line in f:

    process(line)#对每行进行的具体处理

但是我发现每次都处理一部分数据就停止了,也就是本来有一百多万行数据结果只处理了八千多行。我定位到了处理结束的那一行,发现数据有一个用 SUB 标记的乱码,如图所示:
多次查找之后我发现这个文件中这样的符号还不止一个。
 
这个问题在网上很难找到相关的讨论,最后终于从一个论坛大家的回复中找到了答案。说,所有的Windows系统都会把SUB(ASCII 26)当做标准文本的末尾来处理,这样的存在主要是为了某种兼容性考虑。而Python中用‘r’模式读文件就是以标准文本进行处理,所以会遇到这个问题。如果用‘rb’的二进制读取方式就不会有问题了,也就是应该这样:
  with open('artist_data.txt','rb')as f:
顺便说一下,这样的问题在大多数支持POSIX标准的Linux中是不会出现的,因为Linux中把所有的文件都当做二进制文件处理的,r和rb两种读取模式没有本质上的区别。至此,这个问题得到了解决,虽然解决的方式很简单,但是知道为什么要这样解决可是费了好大的功夫,鉴于网上相关的讨论很少,自己记录下来。
 
感谢这个论坛中各位大神的积极讨论:https://www.v2ex.com/t/157187

python读取大文件只能读取部分的问题的更多相关文章

  1. PHP 与Python 读取大文件的区别

    php读取大文件的方法   <?php function readFile($file) { # 打开文件 $handle = fopen($file, 'rb'); while (feof($ ...

  2. Python逐块读取大文件行数的代码 - 为程序员服务

    Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...

  3. 如何使用Python读取大文件

    背景 最近处理文本文档时(文件约2GB大小),出现memoryError错误和文件读取太慢的问题,后来找到了两种比较快Large File Reading 的方法,本文将介绍这两种读取方法. 准备工作 ...

  4. Python读取大文件的"坑“与内存占用检测

    python读写文件的api都很简单,一不留神就容易踩"坑".笔者记录一次踩坑历程,并且给了一些总结,希望到大家在使用python的过程之中,能够避免一些可能产生隐患的代码. 1. ...

  5. Python读取大文件(GB)

    Python读取大文件(GB) - CSDN博客 https://blog.csdn.net/shudaqi2010/article/details/54017766

  6. 强悍的Python读取大文件的解决方案

    这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件. 1. read() 接口的问题 f =open(filename, ...

  7. 【Python】从文件中读取数据

    从文件中读取数据 1.1 读取整个文件 要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下) PI_DESC.txt 3.1415926535 ...

  8. PHP如何快速读取大文件

    在PHP中,对于文件的读取时,最快捷的方式莫过于使用一些诸如file.file_get_contents之类的函数,简简单单的几行代码就能 很漂亮的完成我们所需要的功能.但当所操作的文件是一个比较大的 ...

  9. php使用file函数、fseek函数读取大文件效率分析

    php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接 ...

随机推荐

  1. WPF:Task与事件在下载同步界面中的应用

    //设置一个下载事件类,可传输一个字符串  public class DownloadEventArgs:EventArgs     {         public string id { get; ...

  2. ubuntu18.04下安装matlab2018a

    一.下载 百度网盘链接:https://pan.baidu.com/s/1M6KafnsljmYV9_5m_1pXMw 提取玛:jp76 二.安装 下载下来的文件夹中有三个文件,分别是破解文文件与映像 ...

  3. Hystrix超时测试

    package com.cookie.test; import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.Hystr ...

  4. Java小白进阶之值传递-引用传递

    class ClassA{ int value;//成员变量 } public class TestClassA{ public static void main(String args[]){ in ...

  5. Meta 用法汇总

    本文引自: http://blog.csdn.net/MR_LP/article/details/53607087 什么是 meta ? meta 是html语言head区的一个辅助性标签.也许你认为 ...

  6. Apache性能测试工具ab使用详解~转载

    Apache自带性能测试工具ab使用详解 一. Apache的下载 1. http://www.apache.org/,进入Apache的官网 2. 将页面拖到最下方“Apache Project L ...

  7. Docker进阶-资源管理Swarm+Portainer

    Docker Swarm资源管理 Docker Swarm是Docker官方三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态进行支持的核心方案. 使用它,用户可以将多个Do ...

  8. bi-Lstm +CRF 实现命名实体标注

    1. https://blog.csdn.net/buppt/article/details/82227030 (Bilstm+crf中的crf详解,包括是整体架构) 2. 邹博关于CRF的讲解视频 ...

  9. caffe学习网站

    1.http://www.cnblogs.com/denny402/tag/caffe/

  10. 随笔编号-12 阿里云CentOS7系列一 -- 安装JDK7的方法.

    最近因为数据采集以及生产环境冲突.导入windows Server 2008系统经常死机.经讨论决定把采集服务程序和生产服务进行分开.采集程序通过windows Server2008运行.而生产程序通 ...