zoukankan      html  css  js  c++  java
  • Python读取文件数据

    1题目要求:

      文本文件有这些数据,需要的只有其中的5个属性,如下颜色标记

      像以下的数据达到75万组:

    1product/productId: B0000UIXZ4 
    2product/title: Timex Link USB Watch
    3product/price: unknown 
    4review/userId: A14MVG2I9PS6NZ
    5review/profileName: B. Kuiper "Wah"
    6review/helpfulness: 0/0
    7review/score: 5.0
    8review/time: 1275091200
    9review/summary: Best geek weapon ever...but no longer made?
    10review/text: This watch serves as my brain and now, my brain is no lo

    2基于Python进行粗略读取

      代码如下:没有对输出进行处理,只是简单筛选

      fo.write();写入文件的的时候注意的地方:3.X与2.X的写入文件的类型不同

    写入错误:
    TypeError: a bytes-like object is required, not 'str'
    -------------------------------------------------------------
    btest.decode('utf-8')    #结果'abcde'
    strtest.encode('utf-8')    #结果b'abc'
    

      

    need = ['product/productId:','product/price:','review/helpfulness:','review/score:','review/time:']
    fo = open("C:\Users\Five\Desktop\新建文件夹\python2.txt", "wb")
    for line in open("C:\Users\Five\Desktop\新建文件夹\Watches.txt"):
    	flag = 0;
    	for i in range(0,5):
    		if line.find(need[i])==0:flag =1;break;
    	if flag==1:fo.write((line+' ').encode('utf-8'));
    fo.close();
    

      读取文件的方式有以下:

    f = open("foo.txt")             # 返回一个文件对象  
    line = f.readline()             # 调用文件的 readline()方法  
    while line: 
        ....
        line = f.readline() 
    ----------------------------------------------------
    for line in open("foo.txt"):  
    ----------------------------------------------------
    f = open("c:\1.txt","r")  
    lines = f.readlines()#读取全部内容  
    for line in lines  
        print line  

    3基于C语言的详细读取

      读取并处理的结果如下:

      预备知识读取的方式

      fp=fopen("python.txt","r");
      fscanf(fp,"%s",&s);
      printf("%s
    ",s);
    里面是按空格分开来读取的。
     下面是按行读取的
    --------------------------------------
      fgets(s,1028*8,fp);
    fgets(s,1028*8,fp)读取的长度比=实际+1(换行符分界)
      printf("%s",s);
    ----------------------------------------
      fscanf(fp,"%[^
    ]",&s);
    -------------------------------
    

      打开方式详细如下:

    对于文件使用方式有以下几点说明:
    1) 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
    r(read): 读
    w(write): 写
    a(append): 追加
    t(text): 文本文件,可省略不写
    b(banary): 二进制文件
    +: 读和写
    意义
    “rt” 只读打开一个文本文件,只允许读数据
    “wt” 只写打开或建立一个文本文件,只允许写数据
    “at” 追加打开一个文本文件,并在文件末尾写数据
    “rb” 只读打开一个二进制文件,只允许读数据
    “wb” 只写打开或建立一个二进制文件,只允许写数据
    “ab” 追加打开一个二进制文件,并在文件末尾写数据
    “rt+” 读写打开一个文本文件,允许读和写
    “wt+” 读写打开或建立一个文本文件,允许读写
    “at+” 读写打开一个文本文件,允许读,或在文件末追加数据
    “rb+” 读写打开一个二进制文件,允许读和写
    “wb+” 读写打开或建立一个二进制文件,允许读和写
    “ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
    

      处理的结果:(对于product/price: unknown 这一类未知的置为0处理)

    B000NLZ4A2 0 0/0 4.0 1260230400
    B000NLZ4A2 0 0/0 4.0 1216339200
    B000NLZ4A2 0 1/2 5.0 1245024000
    B000AIO6RA 0 3/3 5.0 1122422400
    B000AIO6RA 0 0/0 4.0 1207958400
    B000NLZ4AM 0 2/2 4.0 1250208000
    B000NLZ4AM 0 2/2 5.0 1244764800
    B000NLZ4AM 0 2/2 5.0 1243296000
    B000NLZ4AM 0 1/1 4.0 1235952000
    B000NLZ4AM 0 0/0 5.0 1236816000
    B000F70V0M 0 1/1 5.0 1189468800
    B000F70V0M 0 0/0 4.0 1244678400
    B000F70V0M 0 0/0 5.0 1204502400
    B000F70V0M 0 0/0 5.0 1201478400
    ......
    ......
    ......以上只是一部分数据
    

      详细代码如下:

    #include<stdio.h>
    #include<string.h>
    void getValue(char s[],char temp[]){
          int end = strlen(s);
          int start =0;
          int i =0,j=-1;
          char c;
          for(i=end-2;s[i]!=' ';i--){
                temp[++j]= s[i];
          }
        //  printf("
    ");
          temp[j+1]='';
          for(i=0;i<=j;){
                  c=temp[i];
                  temp[i]=temp[j];
                  temp[j]=c;
                  i++;j--;         
          } 
    }
    int main(){
      FILE *fr,*fw;
      int data,count;  
      long int sum=0;
      char s[100000];//读取一行数据 
      char temp[20];//截取空格后面的Value 
      char s1[20],s2[20],s3[20],s4[20],s5[20];//需要的5个属性Value
      char unknow[]="unknown";
      char zero[]="0";
      fr=fopen("Watches.txt","r");
      fw=fopen("p.txt","wt");
      count=1;
      while(fgets(s,1028*80,fr)!=NULL){
           //  printf("%s",s);
             if(count!=11)                  
                   getValue(s,temp);      
             if(count==1)
                    strcpy(s1,temp);
             else if(count==3){
                    strcpy(s2,temp);
                    if(strcmp(s2,unknow)==0)
                         strcpy(s2,zero);
                                                            
             }
             else if(count==6)
                    strcpy(s3,temp); 
             else if(count==7)
                    strcpy(s4,temp);
             else if(count==8)
                    strcpy(s5,temp);                                                              
             if(count==11){
                          
                    fprintf(fw,"%s %s %s %s %s
    ",s1,s2,s3,s4,s5);
                    count=0; 
             }
             sum++;
             count++;
             fflush(fw);  
             printf("%ld
    ",sum);         
      }
      printf("%ld",sum);
      fclose(fw);
      printf("press any key to end!
    ");
      getchar();
      return 0;
    }
    

      

      

  • 相关阅读:
    汉字在屏幕上的显示
    手机上的ROM与RAM
    数据表示和计算
    存储器的层次结构
    计算机系统概述
    Python中的文件路径的分隔符
    网络爬虫的基本原理
    iOS多线程简介
    Quartz2D简介
    iOS 事件传递响应链
  • 原文地址:https://www.cnblogs.com/foreverzd/p/4466643.html
Copyright © 2011-2022 走看看