我正在从2个文件创建命令:一个文件包含3行命令(“ comando.txt”),第二个文件包含参数(file.txt) txt中的命令包含无法在csv或list上设置的字符,例如(“'和,)。
例如,对于df.loc [0],命令结果为TEXT01:12TEXT02“ LAS'5022268h'0023;。
for line in f1:
的i值甚至没有超过接收到的指令print(i)
import csv
import pandas as pd
new_text = ''
def paso(row):
i = row
j=0
result=''
# 2 - it print row number that function
print(i)
for line in f1:
# 3 - ERROR is here, the unique value for i=0, never pass
#print(i)
strip = line.strip()
result = result + add_para(strip,i,j)
j=j+1
#The result is TEXT01:012TEXT02"LAS'5022268h'0023;
return result
def add_para(comando,valor,j):
if j< columnas:
#print(row)
comando = comando +str(df.iloc[row,j])
return comando
else:
comando=comando
return comando
with open('file.txt') as f2:
df = pd.read_csv(f2,header=None)
filas = df.shape[0]
columnas = df.shape[1]
with open('comando.txt') as f1:
for row in range(filas):
for col in range(1):
# 1 - it passes row number to function "paso"
regreso = paso(row)
#print(regreso)
打印输出
In [44]:
with open('comando.txt') as f1:
for line in f1:
print(line.strip())
Out[45]:
TEXT01:
TEXT02"LAS'
h'0023;
In [45]: df.head()
Out[45]: 0 1
0 12 5022268
1 13 5022269
2 14 5022277
3 15 5022279
4 16 5022377
没有显示错误,而是如何将行号i
传递到for line in f1:
例如,命令结果是TEXT01:12TEXT02"LAS'5022268h'0023;
的{{1}}和df.loc[0]
的第二个命令TEXT01:13TEXT02"LAS'5022269h'0023;
...等等
答案 0 :(得分:0)
文件对象是流。一旦到达文件末尾,任何新读取都将返回文件末尾条件,除非后退流。
因此,您只需要在调用paso
之前倒回文件:
with open('comando.txt') as f1:
for row in range(filas):
for col in range(1):
# 1 - it passes row number to function "paso"
f1.seek(0)
regreso = paso(row)
print(regreso)
有了您的样本数据,就足以获取:
0
TEXT01:12TEXT02"LAS'5022268h'0023;
1
TEXT01:13TEXT02"LAS'5022269h'0023;
2
TEXT01:14TEXT02"LAS'5022277h'0023;
3
TEXT01:15TEXT02"LAS'5022279h'0023;
4
TEXT01:16TEXT02"LAS'5022377h'0023;
顺便说一句,你写道:
txt中的命令包含无法在csv上设置的字符(例如“”和“)
那是错的。如果将引号字符加倍,则csv格式可以接受任何字符,包括其引号字符或字段内的字段分隔符。