我当前正在创建一个帐户管理程序,该帐户的详细信息存储在.csv文件中,用户将输入他们想要删除的帐户的用户名,但是当我删除一行时,如果该行不能正常工作,我使用“ r +”模式实际上不会做任何事情,当我使用“ w”模式时,当我尝试删除一行时,它将删除整个文件。
以下是删除功能的代码:
delUserName = input("enter the username of the account you want to delete")
with open(filename, 'r+') as csvFile:
reader = csv.reader(csvFile, delimiter=",")
writer = csv.writer(csvFile, delimiter=",")
for rows in reader:
if rows[1] == delUserName:
writer.writerow("")
csv文件设置为1,username,password
,因此,行[0]将是索引,行[1]将是用户名,行[2]将是密码
任何帮助将不胜感激。
答案 0 :(得分:1)
遍历文件的行并同时写入文件是一个坏主意。使用第二个文件从第一个文件获取除要删除的行以外的所有行,关闭两个文件句柄,最后将新文件移到旧文件位置。或执行内存中的所有更改,然后将它们写入第一个文件。
此问题大部分是以下内容的重复:
答案 1 :(得分:1)
使用pandas数据框会更容易: csvfile:testGen.csv#仅用于示例
username password
0 user1 123
1 user2 223
2 user3 344
3 user4 122
这是csv文件包含的示例数据,这是删除所需行的方法
import pandas as pd
df=pd.read_csv("testGen.csv")
df = df[~df["username"].str.contains("user2", na=False)]
then your answer will be:
username password
0 user1 123
2 user3 344
3 user4 122
如果要直接将其转储为csv文件,只需编写:
df = df[~df["username"].str.contains("user2", na=False)].to_csv('testGen1.csv', index = False)
答案 2 :(得分:0)
检查该行中是否存在该值,如果存在,则使用索引删除包含该值的行并重写数据框。
import pandas as pd
df = pd.read_csv('testFile.csv',index_col='index')
df.head()
if df[df['username'].isin(['satyam'])].shape[0]:
df = df.drop(df[df.username == 'satyam'].index[-1]).reset_index(drop=True).rename_axis('index')
print(df)
#to write into csv
df.to_csv('abc.csv')
#reading the new csv with dropped row
pd.read_csv('abc.csv')
答案 3 :(得分:0)
更容易在同一行上存储名称和密码:
文件'accounts.csv'
:
User1,Password1
User2,Password2
User3,Password3
然后您可以简单地删除整行:
acc = input('Enter the username of the account you want to delete: ')
with open('accounts.csv', 'r') as f:
accounts = f.readlines()
acc_found = [x for x in accounts if x.split(',')[0].lower() == acc.lower()]
if acc_found:
print('Remove you account: {}'.format(acc))
accounts.remove(acc_found[0])
with open('accounts.csv', 'w') as f:
f.write(''.join(accounts))
else:
print('Sorry! Account "{}" not found.'.format(acc))
测试1:
Enter the username of the account you want to delete: User1
Remove you account: User1
测试2:
Enter the username of the account you want to delete: User5
Sorry! Account "User5" not found.