I正在用pd.read_csv
读取CSV文件,如图所示:
lisp = pd.read_csv('ida_lisp.ida', header=None, skip_blank_lines=False)
我用键值替换%1%
,并将结果保存到不同的位置,如图所示:
heating_setpoint_s = [19, 20, 21, 22, 23, 24]
for i in range(len(heating_setpoint_s)):
lisp1 = lisp.replace('%1%', str(heating_setpoint_s[i]), regex=True)
path = "C://Users//nico//"+str(i+1)+"_ida"
os.chdir(path)
lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ")
除了旧CSV文件中的一行MDESIGN ""
:外,一切正常
K2 0.0
TAU 1.0
SPECPUMPPO 349.0
MDESIGN ""
MODULE chil
TYPE SIMCHIL
NFPLR 0
COP 3
保存后更改为:
K1 0.0
K2 0.0
TAU 1.0
SPECPUMPPO 349.0
" MDESIGN """""
MODULE chil
TYPE SIMCHIL
NFPLR 0
COP 3
有人知道如何防止这种情况发生吗?
我对您的代码进行了一些调整,以帮助解决这个问题(在bold中(,并使事情变得更加直接。
- 更新了
for
循环,以便直接迭代list
,而不是使用range(len())
调用进行卷积 -
添加了一个
replace
函数来替换字符串中任何杂散的"
- 添加了一个
strip
函数来清除所有值,以删除任何前导/尾随空格,从而使输出CSV是干净的 - 已更新文件路径串联以使用
os.path.join
- 在存储目录不存在的情况下添加了
os.makedirs
调用
示例代码:
import os
import pandas as pd
lisp = pd.read_csv('ida_lisp.ida', header=None, skip_blank_lines=False)
heating_setpoint_s = [19, 20, 21, 22, 23, 24]
for i in heating_setpoint_s:
lisp1 = lisp.replace('%1%', str(i), regex=True).replace('"+', '', regex=True)
# Clean column 0, assuming this is the only column, based on sample data provided.
lisp1 = lisp1.iloc[:, 0].str.strip()
path = "C:/Users/nico/{}_ida".format(i)
if not os.path.exists(path):
os.makedirs(path)
lisp1.to_csv(os.path.join(path, 'ida_lisp.ida'), header=False, index=False, na_rep="")
CSV输入
K2 0.0
TAU 1.0
SPECPUMPPO 349.0
MDESIGN ""
MODULE chil
TYPE SIMCHIL
NFPLR 0
COP 3
输出:
K2 0.0
TAU 1.0
SPECPUMPPO 349.0
MDESIGN
MODULE chil
TYPE SIMCHIL
NFPLR 0
COP 3
根据panda文档,to_csv()
有一个默认为"
的quotechar=
参数,也许您可以尝试另一个符号,比如~
,用于引号字符(即lisp1.to_csv('ida_lisp.ida', header=False, index=False, na_rep=" ", quotechar='~')
(。通过这种方式,您可以测试问题是否纯粹是由引号字符引起的,而不是来自您的数据。