我试图从facebook页面为产品提取一些数据并将其全部转储到文本文件中,但我发现该文件会一直覆盖数据。我不确定这是一个分页问题,还是我必须制作几个文件。
这是我的代码:
#Modules
import requests
import facebook
import json
def some_action(post):
print posts['data']
print post['created_time']
#Token
access_token = 'INSERT ACCESS TOKEN'
user = 'walkers'
#Posts
graph = facebook.GraphAPI(access_token)
profile = graph.get_object(user)
posts = graph.get_connections(profile['id'], 'posts')
#Write
while True:
posts = requests.get(posts['paging']['next']).json()
#print posts
with open('test121.txt', 'w') as outfile:
json.dump(posts, outfile)
知道为什么会这样吗?
答案 0 :(得分:5)
w
覆盖,打开a
以在循环外添加或打开文件:
追加:
while True:
posts = requests.get(posts['paging']['next']).json()
#print posts
with open('test121.txt', 'a') as outfile:
json.dump(posts, outfile)
在循环外打开一次:
with open('test121.txt', 'w') as outfile:
while True:
posts = requests.get(posts['paging']['next']).json()
#print posts
json.dump(posts, outfile)
使用第二个选项更有意义,如果您要多次运行代码,那么您也可以在循环外部使用a
打开,如果文件不存在则会创建,如果它确实会附加数据
答案 1 :(得分:3)
这用于使用w
模式的文件操作符覆盖您可以使用的内容a
追加方法
可以这样做
<强>修饰:强>
with open('test121.txt', 'w') as outfile:
while True:
posts = requests.get(posts['paging']['next']).json()
json.dump(posts, outfile)
w
覆盖现有文件
<强>即)强>
<强> FILE1.TXT:强>
123
<强>码强>
with open("File1.txt","w") as oup1:
oup1.write("2")
python运行后File1.txt:
2
这就是它的价值被覆盖
a
附加到现有文件
<强>即)强>
<强> FILE1.TXT:强>
123
<强>码强>
with open("File1.txt","a") as oup1:
oup1.write("2")
python运行后File1.txt:
1232
书面内容附加到最后
答案 2 :(得分:2)
打开和关闭文件
使用实际数据文件读写标准输入和输出。
Python提供了默认操作文件所需的基本功能和方法。您可以使用文件对象完成大部分文件操作。
打开功能
在您阅读或编写文件之前,您必须使用Python的内置open()函数打开它。此函数创建一个文件对象,用于调用与其关联的其他支持方法。
语法的 file object = open(file_name [,access_mode] [,buffering])
以下是参数详情:
file_name: file_name参数是一个字符串值,其中包含您要访问的文件的名称。
access_mode : access_mode确定必须打开文件的模式,即读取,写入,追加等。可能值的完整列表是在下表中给出。这是可选参数,默认文件访问模式为read(r)。
缓冲: 如果缓冲值设置为0,则不会发生缓冲。如果缓冲值为1,则在访问文件时执行行缓冲。如果将缓冲值指定为大于1的整数,则使用指示的缓冲区大小执行缓冲操作。如果为负,则缓冲区大小是系统默认值(默认行为)。
以下是打开文件的不同模式列表 -
模式和说明 r =打开文件以供阅读。文件指针位于文件的开头。这是默认模式。
rb =打开一个文件,仅以二进制格式读取。文件指针位于文件的开头。这是默认模式。
r + =打开文件进行读写。文件指针放在文件的开头。
rb + =以二进制格式打开文件进行读写。文件指针放在文件的开头。
w =打开文件仅供写入。如果文件存在,则覆盖文件。如果该文件不存在,则创建一个用于写入的新文件。
wb =打开一个文件,只能以二进制格式写入。如果文件存在,则覆盖文件。如果该文件不存在,则创建一个用于写入的新文件。
w + =打开文件进行书写和阅读。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个用于读写的新文件。
wb + =以二进制格式打开文件进行写入和读取。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个用于读写的新文件。
a =打开要追加的文件。如果文件存在,则文件指针位于文件的末尾。也就是说,文件处于追加模式。如果该文件不存在,则会创建一个用于写入的新文件。
ab =打开一个文件,以二进制格式附加。如果文件存在,则文件指针位于文件的末尾。也就是说,文件处于追加模式。如果该文件不存在,则会创建一个用于写入的新文件。
a + =打开文件以进行追加和阅读。如果文件存在,则文件指针位于文件的末尾。该文件以追加模式打开。如果该文件不存在,则会创建一个用于读写的新文件。
ab + =打开文件,以二进制格式追加和读取。如果文件存在,则文件指针位于文件的末尾。该文件以追加模式打开。如果该文件不存在,则会创建一个用于读写的新文件。
阅读和书写文件
文件对象提供了一组访问方法,通过使用read()和write()方法来读取和写入文件,使我们的生活更轻松。
write()方法
write()方法将任何字符串写入打开的文件。值得注意的是,Python字符串可以包含二进制数据,而不仅仅是文本。
write()方法不会在字符串末尾添加换行符(&#39; \ n&#39;) -
<强> 语法 强>
fileObject.write(string);
这里,传递参数是要写入打开文件的内容。
实施例
# Open a file
fo = open("file.txt", "wb")
fo.write( "Python is a great language");
# Closeopend file
fo.close()
上述方法会创建foo.txt文件并在该文件中写入给定内容,最后它会关闭该文件。如果您打开此文件,则会有以下内容。
Python是一门很棒的语言。
read()方法
read()方法从打开的文件中读取字符串。值得注意的是,Python字符串可以包含二进制数据。除了文本数据。
<强> 语法 强>
fileObject.read([count]);
这里,传递的参数是要从打开的文件中读取的字节数。此方法从文件的开头开始读取,如果缺少count,则尝试尽可能多地读取,可能直到文件结束。
实施例
让我们采取上面创建的文件foo.txt。
# Open a file
fo = open("foo.txt", "r+")
str = fo.read(10);
print "Read String is : ", str
# Close opend file
fo.close()
这会产生以下结果 - Read String是:Python是