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\n",s);
里面是按空格分开来读取的。
 下面是按行读取的
--------------------------------------
  fgets(s,1028*8,fp);
fgets(s,1028*8,fp)读取的长度比=实际+1(换行符分界)
  printf("%s",s);
----------------------------------------
  fscanf(fp,"%[^\n]",&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("\n");
      temp[j+1]=‘\0‘;
      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\n",s1,s2,s3,s4,s5);
                count=0;
         }
         sum++;
         count++;
         fflush(fw);
         printf("%ld\n",sum);
  }
  printf("%ld",sum);
  fclose(fw);
  printf("press any key to end!\n");
  getchar();
  return 0;
}

  

  

时间: 2024-11-03 05:42:54

Python读取文件数据的相关文章

python读取文件小结

python读取文件小结 你想通过python从文件中读取文本或数据. 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = open('thefile.txt').read( )     # 文本文件中的所有文本 all_the_data = open('abinfile','rb').read( )    # 二进制文件中的所有数据 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用

python读取数据库数据,读取出的中文乱码问题

最近遇到python读取数据库数据,读取出的中文乱码问题, 网络搜索的基本是: "1. Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)2. MySQL数据库charset=utf-83. Python连接MySQL是加上参数 charset=utf84. 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)" 这些,一一尝试后仍未解决.去数据库查看了下,发现这个出现中文乱码的字段类型是varcha

解决Python读取文件时出现UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte...

用Python在读取某个html文件时会遇到下面问题: 出问题的代码: 1 if __name__ == '__main__': 2 fileHandler = open('../report.html', mode='r') 3 4 report_lines = fileHandler.readlines() 5 for line in report_lines: 6 print(line.rstrip()) 修改方式是在open方法指定参数encoding='UTF-8': if __nam

python 读取文件时报错UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0x80 in position 205: illegal multibyte sequence

python读写txt文件转化成excel文件 python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence" 解决办法1. FILE_OBJECT= open('order.log','r', encoding='UTF-8') 解决办法2. FILE_OBJECT= open('order.log','rb') pyth

Python读取文件

1.在Python中如何操作文件 2.如何读取大文件 文件内建函数:open(file_name,access_mode='r',buffering=-1),file() 文件访问模式:     r:以读方式打开(默认)     w:写     a:追加     b:以二进制方式打开     r+ w+ a+:读写方式打开     rb:以二进制读模式打开     wb:以二进制写模式打开     ab:以二进制追加模式打开 输入,输出 read() 读取给定数目个字节 readline() 读

FileInputStream 读取文件数据的输入字节流

1 package com.inputstream; 2 3 /* 4 File类: 用于描述一个文件或者文件夹的. 5 6 通过File对象我们可以读取文件或者文件夹的属性数据,如果我们需要读取文件的内容数据,那么我们需要使用IO流技术. 7 8 IO流(Input Output) 9 10 IO流解决问题: 解决设备与设备之间的数据传输问题. 内存--->硬盘 硬盘--->内存 11 IO流技术: 12 IO流分类: 13 如果是按照数据的流向划分: 14 输入流 15 输出流 16 如果

Python读取文件的最后一行(非空行)

利用Python读取文件(针对大文件和小文件两种)的首行(第一行)和末行(最后一行).脚本借鉴了前人的两种处理思路(在下面的脚本中有注释说明引用出处),并修正了原先两种处理方法中如果文件末尾含有多个空行而返回空行的问题. 脚本内容可以从GitHub上获取: https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/functions/file/getFileLastLine.py 脚本内容如下: #!/usr/bi

R语言读取文件数据

R语言读取文件数据 ??1.read.table()函数 2.其他函数的缺省 read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".",fill = TRUE, ...)read.csv2(file, header = TRUE, sep = ";", quote="\"", dec=",",fill =

python 读取文件时报错: UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode byte 0xa4 in position 127: illegal multibyte sequence

UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 127: illegal multibyte sequence python读取文件时提示UnicodeDecodeError: 'gbk' codec can't decode byte 0xa4 in position 127: illegal multibyte sequence 解决办法: FILE_OBJECT= open('order.log','r'