Not able to read from text file when timestamp is used

Asked by Milind Warade

Dear,

I have one text file "Time.txt" which contents data like:
18, 50, 50
19, 25, 56

Then I have write script in which I want take the data from text file line by line.

wait(2)
import array
arr=[]
f=open("D:\\DPTT_XML\\Time.txt","r")
fout = open("D:\\DPTT_XML\\Time-results.txt","w")

for line in f.readlines():
    arr.append(line.strip()) # get rid of newline
f.close()
wait(2)
click("1348813496420-5.png")
wait(1)
# For clock in for Employee E3
type("D:\\DPTT_XML\\E3.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(1)
# Open firefox
click("1348813496420-5.png")
wait(5)
click("earthprogram-8.png")
type("firefox" + Key.ENTER)
wait(5)
type("t", KeyModifier.CTRL)
wait(5)
type("http://abcd:80/Test.jsp" + Key.ENTER)
wait("RequestXMLRe-2.png",20)
type(Key.TAB + Key.TAB)
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = (arr[0]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
wait (timeToWait)
click("submit-2.png")
wait(2)
click("clear-1.png")
wait(2)
# For clock in for Employee E6
click("1348813496420-5.png")
wait(1)
type("D:\\DPTT_XML\\E6.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615-1.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = (arr[1]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
wait (timeToWait)
click("submit-2.png")
wait(2)
click("clear-1.png")
wait(2)

Error occurs as:

[log] CLICK on (28,748)

[log] TYPE "D:\DPTT_XML\E3.txt"

[log] TYPE " "

[log] Ctrl+TYPE "a"

[log] Ctrl+TYPE "c"
[log] Alt+TYPE "?"

[log] CLICK on (28,748)

[log] CLICK on (101,695)

[log] TYPE "firefox "

[log] Ctrl+TYPE "t"

[log] TYPE "http://abcd:80/Test.jsp "

[log] TYPE " "

[log] Ctrl+TYPE "v"

[error] Stopped
[error] An error occurs at line 37
[error] Error message: Traceback (most recent call last):
 File "C:\Users\milindw\AppData\Local\Temp\sikuli-tmp6010284413651765971.py", line 37, in
 timeUntil = time.mktime(tuple(until))
OverflowError: an integer is required

But when I have tried by writing :
from until[3:6] = (arr[0]) # hour minute second
To until[3:6] = (18, 30, 56) # hour minute second

Then it works.

But I don't know why it was not picking value from text file.

Question information

Language:
English Edit question
Status:
Solved
For:
SikuliX Edit question
Assignee:
No assignee Edit question
Solved by:
RaiMan
Solved:
Last query:
Last reply:

This question was reopened

Revision history for this message
j (j-the-k) said :
#1

Okay as far as I can see, you're doing the following thing:

1.
for line in f.readlines():
    arr.append(line.strip()) # get rid of newline

Here you read in the file, it is stored in the arr array as string.
After this, your arr[] looks like this:
["18, 50, 50","19, 25, 56"]

2.
until[3:6] = (arr[0]) # hour minute second

Here you apply the first element of the array to your time value.
arr[0] will be a String containing the first line of your file (e.g. "18,50,50").
With this line of code, you apply EACH character of this arr[0]-string to the until list.
After this, your until looks something like [val1,val2,val3,'1','8',',','5','0',','5','0',val10,val11,...].

3.
timeUntil = time.mktime(tuple(until))

Here you try to make a time out of this list again. This fails because
a) You replaced 6 elements in the list and replaced them by 8 characters and
b) The characters you inserted are NOT integers which are required by this function.

The easiest solution would be to use the csv(comma separated values) module:

import csv

reader = csv.reader(open('D:\\DPTT_XML\\Time.txt', "r"), delimiter = ",", skipinitialspace=True)

arr = []

for value in reader:
    arr.append(value)

# later..

until[3:3] = arr[0] # hour minute second # Notice you probably only want to replace 3 values, so its [3:3], and you don't need the brackets.

# now this should work:
timeUntil = time.mktime(tuple(until))

I hope this helps

Revision history for this message
RaiMan (raimund-hocke) said :
#2

@j-the-k

always impressed by your solutions ;-)

but in this case, this is easier:

instead of:
until[3:6] = (arr[1]) # hour minute second

use:
until[3:6] = eval("("+ arr[1] +")")

this evaluates the statement containing the number string.

if the file would contain
(18, 50, 50)
(19, 25, 56)

it could be reduced to:
until[3:6] = eval( arr[1] )

Revision history for this message
j (j-the-k) said :
#3

Okay your solution is easier but I don't think it is cleaner :-P
I personally don't like the eval and exec command, to me it always feels like cheating.
Silly, I know, I guess having learnt programmeing in Java, I'm just not used to this "easy way out" solutions.
Maybe it is because my IDE is complete lost when I start things like eval/exec that and I like the security of my syntax and semantic checking friend, even though it's hard for an IDE to do that in languages like Python anyway.
Getting a little philosophical here, I should go to sleep :D

You're right of course, yours is smarter.

Revision history for this message
Milind Warade (warademilind) said :
#4

Thanks RaiMan, that solved my question.

Revision history for this message
Milind Warade (warademilind) said :
#5

Hi ,

I am again not able to read the time from the text file.

When there are two lines say,
(19, 45, 08)
(19, 46, 10)
then it was working in fine manner.

But in below script it was not working.

I have given text file "Time.txt" as:
(19, 45, 08)
(19, 46, 10)
(19, 47, 08)
(19, 48, 10)
(19, 49, 08)
(19, 50, 10)
(19, 51, 08)
(19, 52, 10)
(19, 53, 08)
(19, 54, 10)
(19, 55, 08)
(19, 56, 10)
(19, 57, 08)
(19, 58, 10)

My script is:

wait(2)
import array
arr=[]
f=open("D:\\DPTT_XML\\Time.txt","r")
fout = open("D:\\DPTT_XML\\Time-results.txt","w")

for line in f.readlines():
    arr.append(line.strip()) # get rid of newline
f.close()
wait(2)
click("1348813496420-4.png")
wait(1)
# For clock in for Employee E3
type("D:\\DPTT_XML\\E3.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(1)
# Open firefox
click("1348813496420-4.png")
wait(5)
click("earthprogram-7.png")
type("firefox" + Key.ENTER)
wait(5)
type("t", KeyModifier.CTRL)
wait(5)
type("https://ABCD:80/IDS/TestIDS.jsp" + Key.ENTER)
wait("RequestXMLRe-1.png",20)
type(Key.TAB + Key.TAB)
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[0]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E6
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E6.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[1]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E5
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E5.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[2]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E2
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E2.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[3]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E3
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E3.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[4]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E7
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E7.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[5]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E8
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E8.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[6]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E5
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E5.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[7]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
timeToWait1 = (86400 + int(timeUntil - time.time()))
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E1
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E1.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[8]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E8
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E8.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[9]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E2
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E2.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[10]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
timeToWait1 = (86400 + int(timeUntil - time.time()))
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E6
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E6.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[11]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
timeToWait1 = (86400 + int(timeUntil - time.time()))
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E7
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E7.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[12]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
timeToWait1 = (86400 + int(timeUntil - time.time()))
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(2)
# For clock in for Employee E1
click("1348813496420-4.png")
wait(1)
type("D:\\DPTT_XML\\E1.txt")
wait(1)
type(Key.ENTER)
wait(1)
type('a', KeyModifier.CTRL)
type('c', KeyModifier.CTRL)
type(Key.F4, KeyModifier.ALT)
wait(2)
click("1349867277615.png")
type('v', KeyModifier.CTRL)
wait(2)
until = list(time.localtime())
until[3:6] = eval(arr[13]) # hour minute second
timeUntil = time.mktime(tuple(until))
timeToWait = int(timeUntil - time.time())
if timeToWait < 1:
    timeToWait1 = (86400 + int(timeUntil - time.time()))
    wait(timeToWait1)
else:
    wait(timeToWait)
click("submit-1.png")
wait(8)
click("clear.png")
wait(5)
App.close("Firefox")
wait(1)

Error Occurs as :

[log] CLICK on (28,748)

[log] TYPE "D:\DPTT_XML\E3.txt"

[log] TYPE " "

[log] Ctrl+TYPE "a"

[log] Ctrl+TYPE "c"
[log] Alt+TYPE "?"

[log] CLICK on (28,748)

[log] CLICK on (101,695)

[log] TYPE "firefox "

[log] Ctrl+TYPE "t"

[log] TYPE "https://ABCD:80/IDS/TestIDS.jsp "

[log] TYPE " "

[log] Ctrl+TYPE "v"

[error] Stopped
[error] An error occurs at line 36
[error] Error message: Traceback (most recent call last):
 File "C:\Users\milindw\AppData\Local\Temp\sikuli-tmp8926183849044586452.py", line 36, in
 until[3:6] = eval(arr[0]) # hour minute second
SyntaxError: ("no viable alternative at character ')'", ('', 1, 11, '(19, 45, 08)\n'))

Please help me out.

Revision history for this message
Best RaiMan (raimund-hocke) said :
#6

again no need to spam your code here. the error message would have been sufficient.

You should think about loops and def()'s to avoid endless copy&paste of the same snippet with tiny modifications.

Your problem:

(19, 45, 08)

cannot be converted to number.

Numbers having a leading 0 are interpreted as octal numbers and 08 is not a valid octal number.

so this works:

(19, 45, 8)

Revision history for this message
Milind Warade (warademilind) said :
#7

My problem was solved. Thanks Raiman.
I will try to optimize the code.