C.N:公司名称 C.N2:公司名称
C.N Cmp Cmp Cmp Cmp Cmp Cmp Cmp
C.N2 IGN IGT IGA IGB IGB
php 12 12 11 35 5 1 6
java 12 12 11 35 5 1 6
react 100 100 100 35 100 100 6
IOS 12 12 11 35 5 1 6
python 12 12 11 35 5 1 6
JSX 12 12 11 35 5 1 6
我在此结构中具有CSV文件。尝试解析100和C.N
import csv
take = ["IGN","IGT", "IGB"]
with open("datas.csv", "r") as Data:
Reader = csv.reader(Data)
for line in Reader:
if line[0] == "IOS":
break
print(line)
我怎样才能选择React数据?但是,如果它包含C.N 2,我的意思是可以选择某些Header的某些数据吗?并发送到其他CSV文件?
预期的投放量是 p>
Cmp Cmp Cmp Cmp Cmp Cmp Cmp Cmp
100 100 100 100 100 100 100 100
如您所见,我跳过了空单元格及其数据
答案 0 :(得分:1)
我一直建议人们在解析excel文件时选择熊猫。将它们全部加载到数据框中,使用起来会变得更加容易。
def Flow_Of_Ships_rule(model, i, v, h):
print(h)
# max(h - model.TimeVisitingPort[k] - model.TimeTravelingPort2Port[k, i]) = 2
if h == 1:
return sum(model.VesselTravel[i, j, v, h] for j in model.Node if j!=i) + model.VesselWait[i, v, 8]\
- sum(model.VesselTravel[k, i, v, (8 - model.TimeTravelingPort2Port[k, i])] for k in model.Node if k!=i) - model.VesselWait[i, v, 7] == 0
elif h == 2:
return sum(model.VesselTravel[i, j, v, h] for j in model.Node if j!=i) + model.VesselWait[i, v, h - model.TimeVisitingPort[i]]\
- sum(model.VesselTravel[k, i, v, (9 - model.TimeTravelingPort2Port[k, i])] for k in model.Node if k!=i) - model.VesselWait[i, v, 8] == 0
else:
return sum(model.VesselTravel[i, j, v, h] for j in model.Node if j!=i) + model.VesselWait[i, v, h - model.TimeVisitingPort[i]]\
- sum(model.VesselTravel[k, i, v, (h - model.TimeVisitingPort[k] - model.TimeTravelingPort2Port[k, i])] for k in model.Node if k!=i) - model.VesselWait[i, v, h - model.TimeVisitingPort[i] - 1] == 0
model.Flow_Of_Ships = Constraint(model.Node, model.Vessel, model.Time, rule=Flow_Of_Ships_rule)
###############################################################################
def One_Flow_Of_Ships_rule(model, v, h):
return sum(sum(model.VesselTravel[i, j, v, h] for j in model.Node) for i in model.Node) + sum(model.VesselWait[i, v, h] for i in model.Node) <= 1
model.One_Flow_Of_Ships = Constraint(model.Vessel, model.Time, rule=One_Flow_Of_Ships_rule)
###############################################################################
def No_Travel_rule(model, i, j, v, h):
if i != j:
return Constraint.Skip
else:
return model.VesselTravel[i, j, v, h] == 0
model.No_Travel = Constraint(model.Node, model.Node, model.Vessel, model.Time, rule=No_Travel_rule)
答案 1 :(得分:0)
最终编辑:
问题描述
发布部分 real 数据文件(https://imgur.com/a/AgRMC8S)后,
问题和解决方案立即变得清晰起来:
您的csv文件是一个简单的,完全符合标准的csv文件,以逗号作为分隔符(参见蓝色标记),因此即使是空单元格也可以轻松处理,因为它们只是两个直接连续的逗号(请参见标记)。红色)。
即您的样本数据与您的真实数据无关...
正确的等效样本数据文件应为
C.N,Cmp,Cmp,Cmp,Cmp,Cmp,Cmp,Cmp
C.N2,IGN,IGT,IGA,,IGB,IGB,
php,12,12,11,35,5,1,6
java,12,12,11,35,5,1,6
react,100,100,100,35,100,100,6
IOS,12,12,11,35,5,1,6
python,12,12,11,35,5,1,6
JSX,12,12,11,35,5,1,6
这是为什么@kerwei的基于简单pd.read_csv
并以逗号作为默认分隔符的熊猫解决方案为您工作的原因,尽管示例csv数据中没有单个逗号。
回答正确的问题
在您的代码代码段中,打印每行直到,直到您感兴趣的行之后。
但是您应该什么都不打印除了,您会到达您感兴趣的行:
import csv
with open("datas.csv", "r") as Data:
Reader = csv.reader(Data)
for line in Reader:
if line[0] == "react":
print(line)
break
但是,使用pandas可以更好地解决您对行进行过滤的其他要求,因此我的 pandas方法如下:
import pandas as pd
df = pd.read_csv(filename, index_col=0)
df_r = df.loc[['C.N2', 'react'], ~df.loc['C.N2'].isna()]
# Cmp Cmp.1 Cmp.2 Cmp.4 Cmp.5
#C.N
#C.N2 IGN IGT IGA IGB IGB
#react 100 100 100 100 100
仅将此结果的数据行(不带标头和索引的df)写入另一个csv文件就很容易:
df_r.to_csv('react.csv', header=False, index=False)
#IGN,IGT,IGA,IGB,IGB
#100,100,100,100,100
但是您当然也可以 在没有外部库的情况下完成
with open(filename) as f:
next(f)
header = f.readline().strip().split(',')
drop_idx = [i for i, h in enumerate(header) if not h]
for line in f:
if line.startswith('react'):
data = line.strip().split(',')
break
for i in drop_idx[::-1]:
header.pop(i)
data.pop(i)
with open('react.csv', 'w') as f:
f.write(','.join(header[1:]) + '\n')
f.write(','.join(data[1:]))
最后提出一个未来的问题:请按照[mcve]的方式尝试以某种方式简化您的问题,即不会丢失您实际问题的重要属性,这将节省大量时间