python读取哪些文件_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

#include

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值