我有一个文件保存为.csv
"400":0.1,"401":0.2,"402":0.3
最终,我希望将数据以适当的格式保存在csv文件中,以便进一步处理。问题是文件中没有换行符。
pathname = r"C:\pathtofile\file.csv"
with open(pathname, newline='') as file:
reader = file.read().replace(',', '\n')
print(reader)
with open(r"C:\pathtofile\filenew.csv", 'w') as new_file:
csv_writer = csv.writer(new_file)
csv_writer.writerow(reader)
打印阅读器输出看起来正是我想要的(或者至少它是我可以进一步处理的格式)。
"400":0.1
"401":0.2
"402":0.3
现在我想将其保存到新的csv文件中。但是输出看起来像
"""",4,0,0,"""",:,0,.,1,"
","""",4,0,1,"""",:,0,.,2,"
","""",4,0,2,"""",:,0,.,3
我确信将格式转换为
是明智的400,0.1
401,0.2
402,0.3
在此阶段而不是稍后使用其他脚本。
主要问题是我目前的代码
with open(pathname, newline='') as file:
reader = file.read().replace(',', '\n')
reader = csv.reader(reader,delimiter=':')
x = []
y = []
print(reader)
for row in reader:
x.append( float(row[0]) )
y.append( float(row[1]) )
print(x)
print(y)
适用于我目前拥有的csv文件类型,但不适用于上述内容:
y.append( float(row[1]) )
IndexError: list index out of range
所以我也想找到一种方法与他们合作。我想我错过了一些明显的东西,因为我认为正确定义文件的换行符和分隔符并不太难。
with open(pathname, newline=',') as file:
产量
ValueError: illegal newline value: ,
答案 0 :(得分:2)
使用csv
模块的正确方法,无需替换并转换为float
:
import csv
with open('file.csv', 'r') as f, open('filenew.csv', 'w', newline='') as out:
reader = csv.reader(f)
writer = csv.writer(out, quotechar=None)
for r in reader:
for i in r:
writer.writerow(i.split(':'))
生成的filenew.csv
内容(根据您的" 智能 "条件):
400,0.1
401,0.2
402,0.3
<强> 细微差别 强>:
csv.reader
和csv.writer
个对象将逗号,
视为默认分隔符(无需file.read().replace(',', '\n')
)
quotechar=None
对象指定了 csv.writer
,以消除保存值周围的双引号
答案 1 :(得分:1)
您需要拆分值以形成表示行的列表。目前,代码将字符串拆分为单个字符以表示行。
pathname = r"C:\pathtofile\file.csv"
with open(pathname) as old_file:
with open(r"C:\pathtofile\filenew.csv", 'w') as new_file:
csv_writer = csv.writer(new_file, delimiter=',')
text_rows = old_file.read().split(",")
for row in text_rows:
items = row.split(":")
csv_writer.writerow([int(items[0]), items[1])
答案 2 :(得分:0)
如果您查看文档,对于write_row
,它会说:
将row参数写入writer的文件 对象,根据当前方言格式化。
但是,您在代码中编写了整个字符串
csv_writer.writerow(reader)
因为此时reader
是一个字符串。
现在,问题中没有明确提到您要在CSV文件中使用的格式。但正如您所说,如果您可以进行一些预处理来创建列表列表并将每个子列表传递给writerow()
,您应该能够生成所需的文件格式。