为什么我的文本文件会覆盖它上面的数据?

时间:2015-08-05 09:17:52

标签: python json

我试图从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)

知道为什么会这样吗?

3 个答案:

答案 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是