我有一个Python脚本接受用户输入(用条形码扫描),随后生成包含所有用户数据的CSV文件。然后,此CSV文件用于驱动Crystal Report。
输入由一个由空格 - Item#,Lot#和Quantity分隔的连接字段组成。
Example: G00177 LOT12345 24
然而,问题是Item#OR Lot#可能是数字而不是字符串:
Example 1: G00177 12345 24
Example 2: 00177 12345 24
我的想法是在Item#和Lot#的开头添加一个字符,强制它成为一个字符串,然后使用Crystal自动抑制添加的字符。
到目前为止,我只能在Item#的开头添加一个字符 - 而不是Lot#。我也不想附加到数量字段,因为它始终是数字。
非常感谢任何批评,见解或建议。
我刚刚学习Python,我知道我的方法并不是最好的。
感谢您的时间。
答案 0 :(得分:0)
您可以尝试这样的事情:
report_one = '00177 12345 24'
report_two = 'G0177 12345 24'
report_three = 'G0177 I2345 24'
def convert(original):
s = original.split()
for i in range(2): # 2 is used here because that's how many 'words'
try: # we want to check for numeric-ness. This can
int(s[i]) # be adjusted if you have to change your schema
except ValueError: # at some point in the future.
s[i] += 'S'
return ' '.join(s)
print convert(report_one) # Prints 00177 12345 24
print convert(report_two) # Prints G0177S 12345 24
print convert(report_three) # Prints G0177S I2345S 24
首先将字符串拆分为单个字。你知道第一个和第二个是潜在的整数,你需要一种方法让下一个系统将它们理解为字符串。
使用拆分字,如果字符串不是整数,则在int
块下的try
上对单词进行强制转换将抛出ValueError
。也就是说,如果它包含任何字母,except ValueError
子句将会启动。此时,您只需在末尾添加一个字母,然后让您的下一个系统扫描该结尾字母的单词(这里是我的示例)使用'S'
)。
如果您想在开头添加一封信,可以将s[i] += 'S'
替换为:s[i] = 'S' + s[i]