拆分用户输入并在Python字符串中添加字符

时间:2014-06-05 16:06:34

标签: python string csv crystal-reports

我有一个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,我知道我的方法并不是最好的。

感谢您的时间。

1 个答案:

答案 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]