Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么会覆盖用户';在我的csv文件中输入的以前的数据?_Python_Python 3.x_Csv - Fatal编程技术网

Python 为什么会覆盖用户';在我的csv文件中输入的以前的数据?

Python 为什么会覆盖用户';在我的csv文件中输入的以前的数据?,python,python-3.x,csv,Python,Python 3.x,Csv,这是我的代码: class CSV: def __init__(self, path, hdrs): self.path = path # raw string path; i.e. using r"/path/to/file" self.headers = hdrs # list of strings ['Username', 'Password'] self.created = False def create(self): wi

这是我的代码:

class CSV:
    def __init__(self, path, hdrs):
    self.path = path  # raw string path; i.e. using r"/path/to/file"
    self.headers = hdrs  # list of strings ['Username', 'Password']
    self.created = False

    def create(self):
        with open(self.path, 'w', newline='') as f:
            w = csv.writer(f, delimiter=',')
            w.writerow(self.headers)
        self.created = True
        return self.headers

    def read(self):
        with open(self.path, 'r', newline='') as f:
            r = csv.reader(f, delimiter=',')
            rows = list(r)
        return rows

    def write(self, data):  # list of strings ['Username', 'Password']
        if not self.created:
            rows = [self.create()]  # create list of lists
        else:
            rows = self.read()  # this is a list of lists by default
        rows.append(data)
        with open(self.path, 'w', newline='') as f:
            w = csv.writer(f, delimiter=',')
            w.writerows(rows)

def register():
    print ("Your username will now be created from your first name and age.")
    fname = input("Please enter your first name: ")
    age = input("Please enter your age: ")
    fname2 = fname[:3]
    username = fname2 + age
    print ("Your username is {}".format(username.upper()))
    password = input("Please enter a password for your new account: ")

    time.sleep(1.0)

    print ("Username: {}".format(username))
    print ("Password: {}".format(password))



    myCSV = CSV('/Users/Sidd/Desktop/python/Coursework/UserPass.csv', ['Username', 'Password'])
    new = [username, password]
    myCSV.write(new)
在第一段代码中,它在我的csv文件中创建用户名和密码头

在第二段代码中,它将用户的用户名和密码写入标题下方的csv文件中。但是当另一个用户输入另一个用户名和密码时,它会覆盖以前的用户名和密码,而不是低于csv文件中以前的用户名和密码

我怎样才能解决这个问题?
谢谢。

它正在覆盖它,因为每次新用户出现时,您都会用调用第一个

我不太喜欢文件I/O上的
'a'
方法。我见过太多的读/写损坏。因此,为什么不:

  • 只创建一次文档(因此忽略反复调用
    DictWriter
  • 阅读内容并存储它
  • 附加新内容并覆盖
试一试,在我编写的Python 3.6.2上测试!(减去
'/path/to/file'


另外,在我的writer.writerow(…)中,我如何编写它,使用户名写在头用户名下面,密码写在头密码下面?您总是意外地运行这两个块吗?它们都是分开的。第一个块首先运行并创建标题,然后关闭文件。秒块重新打开文件以追加数据。那么,这很简单。当您再次使用
调用第一个
时,您将使用
'w'
打开它,这将截断文件,从而删除其中的所有内容。如果您是第一次创建文件,则只应使用第一个块,当您将新数据添加到现有文件中时,则不会如此。@SiddharthChaudhary那么您没有向我们展示您的完整实现。如前所述,此代码不会覆盖CSV中已经存在的内容。啊,抱歉,在我显示之前,用户注册了一个新帐户,在该帐户中用户输入了新的用户名和密码。然后,该用户名和密码将被获取并存储在csv文件中。但我的问题是,当另一个用户创建新帐户时,他们的用户名和密码会覆盖第一个用户的用户名和密码password@SiddharthChaudhary我提供给您的这段代码在提供新用户名和密码组合时不会覆盖它。例如,在我的示例中,
new
列表将是User#1;
new2
将是用户2。两个用户最终都正确地进入CSV。这是你自己的事情。@SiddharthChaudhary我建议你在原来的帖子中展示你的全部代码(如果你选择使用我的代码,请用我的代码更新),这样我们就可以看到发生了什么。@SiddharthChaudhary我已经看到了一个问题。为什么
def寄存器()中?
import csv

class CSV:
    def __init__(self, path, hdrs):
        self.path = path # raw string path; i.e. using r"/path/to/file"
        self.headers = hdrs # list of strings ['Username', 'Password']
        self.created = False

    def create(self):
        with open(self.path, 'w', newline = '') as f:
            w = csv.writer(f, delimiter = ',')
            w.writerow(self.headers)
        self.created = True
        return self.headers

    def read(self):
        with open(self.path, 'r', newline = '') as f:
            r = csv.reader(f, delimiter = ',')
            rows = list(r)
        return rows

    def write(self, data): # list of strings ['Username', 'Password']
        if not self.created:
            rows = [self.create()] # create list of lists
        else:
            rows = self.read() # this is a list of lists by default
        rows.append(data)
        with open(self.path, 'w', newline = '') as f:
            w = csv.writer(f, delimiter = ',')
            w.writerows(rows)

def register(fin):
    print ("Your username will now be created from your first name and age.")
    name = input("Please enter your first name: ")
    age = input("Please enter your age: ")
    name2 = name[:3].upper()
    username = name2 + age
    print ("Your username is", username)
    password = input("Please enter a password for your new account: ")

    time.sleep(1.0)

    print ("Username:", username)
    print ("Password:", password)

    fin.write([username, password])

myCSV = CSV('/path/to/file', ['Username', 'Password'])
register(myCSV) # fill in with some values
register(myCSV) # fill in with some newer values