我在学习python时遇到的一个问题,我想了很久都没想到完美的解决方案,所以想问问大家,希望大家可以帮忙修正一下,谢谢!
题目是这样的:
编写一个代码,将用户每次输入的内容作为一个元素,组成一个列表,然后将这个列表转储为CSV,并能重新解析为列表,其中的元素不变。
但我尝试了两种方法,但都没办法完美满足要求,总是在最后再次解析为列表时出现问题。
第一种:仅支持输入单字符,多字符就会出现问题。代码如下:
# 创建一个有内容的列表
lst = [] # 创建一个列表
num = 1 # 命一个初始值为1的变量
while True: # 循环输入元素
value = input("请输入第{}个元素:".format(num)) # 获取用户输入的值
if value == '':
break
else:
lst.append(value) # 将获取的值写入列表
num += 1 # 计数
print("生成的列表为:{}".format(lst))
# 将列表转为 str
x = ','.join(lst)
# 将内容写入csv文件
with open("C:\\Users\\shini\\Desktop\\test.csv",'w+',encoding='utf-8') as test: # 生成csv文件
test.write(x) # 将内容写入csv文件
# 完成
print("csv文件创建完成!")
print(f'csv文件中内容为:{x}')
# 提取
table = []
with open("C:\\Users\\shini\\Desktop\\test.csv",'r+',encoding='utf-8') as test1:
txt = test1.read()
for z in range(0,len(txt),2):
table.append(txt[z])
print(f'csv文件内容转列表为:{table}')
单字符运行结果如下
请输入第1个元素:w
请输入第2个元素:r
请输入第3个元素:,
请输入第4个元素:4
请输入第5个元素:
生成的列表为:['w', 'r', ',', '4']
csv文件创建完成!
csv文件中内容为:w,r,,,4
csv文件内容转列表为:['w', 'r', ',', '4']
多字符运行结果如下:
请输入第1个元素:eew
请输入第2个元素:d
请输入第3个元素:,j
请输入第4个元素:sd
请输入第5个元素:
生成的列表为:['eew', 'd', ',j', 'sd']
csv文件创建完成!
csv文件中内容为:eew,d,,j,sd
csv文件内容转列表为:['e', 'w', 'd', ',', ',', 'd']
第二种:若输入字符中本身含有点,则会把原本的点也转换成逗号:
# 创建一个有内容的列表
lst = [] # 创建一个列表
num = 1 # 命一个初始值为1的变量
while True: # 循环输入元素
value = input("请输入第{}个元素:".format(num)) # 获取用户输入的值
if value == '':
break
else:
lst.append(value) # 将获取的值写入列表
num += 1 # 计数
# 把逗号换成点
for i in range(len(lst)):
if ',' == lst[i]:
lst[i] = lst[i].replace(',','.')
# 保存
f = open("C:\\Users\\shini\\Desktop\\test.csv",'w+',encoding='utf-8')
f.write(','.join(lst) + '\n')
f.close()
print('csv文件保存成功!')
# 读取
f2 = open("C:\\Users\\shini\\Desktop\\test.csv",'r+',encoding='utf-8')
data = f2.read().strip('\n').split(',')
for i in range(len(data)):
if '.' == data[i]:
data[i] = data[i].replace('.',',')
print(data)
f2.close()
运行结果如下:
请输入第1个元素:r
请输入第2个元素:.
请输入第3个元素:,
请输入第4个元素:r
请输入第5个元素:u
请输入第6个元素:
csv文件保存成功!
['r', ',', ',', 'r', 'u']
txt是个字符串,txt[z]是个字符,你多个字符肯定读取错位置啊
with open("C:\\Users\\shini\\Desktop\\test.csv",'r+',encoding='utf-8') as test1:
txt = test1.read()
for z in range(0,len(txt),2):
table.append(txt[z])
print(f'csv文件内容转列表为:{table}')
txt是个字符串,而txt[z]是单个字符的字符串
可不可以这样,写入文件的时候给它添加一个换行符“\n”,取出来的时候去掉
# 创建一个有内容的列表
lst = [] # 创建一个列表
num = 1 # 命一个初始值为1的变量
while True: # 循环输入元素
value = input("请输入第{}个元素:".format(num)) # 获取用户输入的值
if value == '':
break
else:
lst.append(value) # 将获取的值写入列表
num += 1 # 计数
print("生成的列表为:{}".format(lst))
# 将内容写入csv文件
with open("test3.csv", 'w+', encoding='utf-8') as test: # 生成csv文件
for i in lst:
test.write(i + '\n') # 添加一个换行符,将内容写入csv文件
# 提取
table = []
with open("test3.csv", 'r+', encoding='utf-8') as test1:
for i, line in enumerate(test1, 1):
table.append(line.strip("\n")) # 去掉换行符,并添加到列表
print(f'csv文件内容转列表为:{table}')